Python: sqlite 或语句
有没有一个 OR 的 sqlite 语句?我试着在网上查,但谷歌好像把 OR 给过滤掉了。
比如说,如果我想在这个表(people)里找一个名字是 Elvis 或者 Richard 的人,我该怎么写查询呢?
people:
+--fname--+--lname--+--has_squirrel--+
|Eric |Schmidt |0 |
+---------+---------+----------------+
|Elvis |Presley |1 |
+---------+---------+----------------+
|Richard |Stallman |0 |
+---------+---------+----------------+
我试过像 select * from people where fname=('Elvis' or 'Richard')
这样的写法,但总是返回 Eric Schmidt(这正好是我想要的相反的结果)!
我也试过 select * from people where fname='Elvis' or 'Richard'
,但这返回了表里的 所有 行!
我在 Ubuntu 10.10 上使用的是 Python 2.6 的 sqlite3 模块。有人能给我简单解释一下 sqlite 的 OR 语句吗?或者告诉我它是不是不存在?我试着查手册,但找不到任何信息(在 sqlite 网站上搜索 OR 会出现一堆错误!)。
谢谢!
5 个回答
试试这个:
select * from people where fname = 'Elvis' or fname = 'Richard'
我搜索了“SQLite 逻辑运算符”,找到了这个链接:http://zetcode.com/databases/sqlitetutorial/expressions/
关于你实际的结果,你是在拿牛和驴比较 :D。当你说:
select * from people where fname='Elvis' or 'Richard'
你其实是在说:
给我所有满足以下条件的人的记录:fname 等于 Elvis,或者 fname 等于 Richard。
你会得到所有的记录,因为 Richard 被认为是“真”,因为它是一个非空字符串。
你应该这样做:
select * from people where fname='Elvis' or fname='Richard'
干杯!
这可能是这样的:
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' 或者... 是真的”。它会把这个字符串当成一个布尔值来判断,我猜因为这个字符串不为空,所以它被判断为真的。然后就会选择你表中的每一行,正如我之前所说的。