一尘不染

Python:sqlite OR语句

sql

是否存在OR sqlite语句?我一直在尝试使用google,但是google似乎正在过滤掉 OR

例如,如果我想在此表中找到某人(人)

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

如果名字叫猫王或理查德,我的查询是什么?

我已经尝试过类似的东西select * from people where fname=('Elvis' or 'Richard'),但是总是返回
Eric Sc​​hmidt (我想要的东西正好相反)!

我也尝试过,select * from people where fname='Elvis' or 'Richard'但是返回表中的 所有 行!

我正在Ubuntu 10.10上使用Python 2.6
sqlite3模块。有人可以给我关于sqlite或statement的快速解释,还是告诉我它是否不存在?我尝试进行RTFM,却找不到任何东西(在sqlite网站上搜索
OR会 吐出很多错误!)。

谢谢!


阅读 227

收藏
2021-03-08

共1个答案

一尘不染

那将是其中之一:

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

我很惊讶您的第一个查询甚至可以工作,而在您的第二个查询中,or 'Richard'基本上意味着or 1=1对表中的每一行总是如此。

您的计算机不像您那样思考。即使fname = 'Elvis' or 'Richard'对您来说似乎很明显,RDBMS也不知道您的意思,而是显示“如果fname等于’Elvis’或…
true”。它将字符串评估为布尔值,并且我假设由于字符串不为空,因此将其评估为true。就像我前面说的,然后继续从表中选择每一行。

2021-03-08