2


0

Python:sqlite ORステートメント

OR sqliteステートメントはありますか? 私はそれをグーグルしようとしましたが、グーグルは_OR_を除外しているようです。

たとえば、このテーブルで誰か(人)を見つけたい場合

people:
+--fname--+--lname--+--has_squirrel--+
|Eric     |Schmidt  |0               |
+---------+---------+----------------+
|Elvis    |Presley  |1               |
+---------+---------+----------------+
|Richard  |Stallman |0               |
+---------+---------+----------------+

名前がエルビスまたはリチャードの場合、クエリは何になりますか?

私は「select * from fname =( 'Elvis' or 'Richard')」のようなものを試しましたが、それは常に_Eric Sc​​hmidt_(私が望むものの正確に反対の行)を返します!

私はまた、fname = 'Elvis’または 'Richard'`の人からselect *を試してみましたが、それはテーブルの行を_all_返します!

Ubuntu 10.10でPython 2.6 sqlite3モジュールを使用しています。 誰かが私にsqlite OR statmentの簡単な説明を与えたり、存在しない場合は教えてもらえますか? RTFMを試しましたが、何も見つかりませんでした(sqlite Webサイトで_OR_を検索すると、大量のエラーが発生します!)。

ありがとうございます。

5 Answer


19


それはそれらのうちの1つでしょう:

SELECT * FROM people WHERE fname IN ('Elvis', 'Richard');
SELECT * FROM people WHERE fname = 'Elvis' OR fname = 'Richard';

最初のクエリも機能することに驚いています。2番目のクエリでは、「または 'Richard'」は基本的に「or 1 = 1」を意味し、テーブルのすべての行に対して常にtrueです。

あなたのコンピューターはあなたのように考えていません。 `fname = 'Elvis’または 'Richard'`が明らかな場合でも、RDBMSはその意味を知らず、「fnameが' Elvis 'または 本当 "。 文字列をブール値に評価します。空ではないため、trueと評価されていると思います。 先ほど言ったように、テーブルからすべての行を選択します。


3


「SQLite論理演算子」は私のクエリであり、これを見つけました:http://zetcode.com/databases/sqlitetutorial/expressions/

実際の結果については、牛とロバを比較しています:D。 あなたが言う時:

select * from people where fname='Elvis' or 'Richard'

あなたは言っている:

_ 次の条件を満たす人からのすべての行を教えてください。fnameがElvisと等しいことは本当です、またはRichardが本当です。 _

リチャードは空ではない文字列であると見なされるため、すべての行を取得しています。

あなたがすべきことは、

select * from people where fname='Elvis' or fname='Richard'

乾杯!


0


簡単なものです。「fname = 'Elvis’またはfname = 'Richard’の人からselect *」を試してみましたか


0


これを試して:

select * from people where fname = 'Elvis' or  fname = 'Richard'


0


ORは、trueまたはfalseを返す論理ステートメントです。

そのため、( "Elvis"または "Richard")はおそらくfalseを返します。 そして、実際のSQLは実際には「fname = False」です。 ほとんどのデータベースはエラーをスローしますが、sqliteは内部的にTCLの「すべてが文字列である」という哲学に従っているため、有効なステートメントです。

必要なのは単純です:

select * from people where fname='Elvis' or fname =  'Richard'