作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
是否有 OR sqlite 语句?我一直在尝试用谷歌搜索它,但谷歌似乎过滤掉了OR。
例如,如果我想在这个表中找到某人(人)
people:
+--fname--+--lname--+--has_squirrel--+
|Eric |Schmidt |0 |
+---------+---------+----------------+
|Elvis |Presley |1 |
+---------+---------+----------------+
|Richard |Stallman |0 |
+---------+---------+----------------+
我的名字是 Elvis 或 Richard,我的问题是什么?
我尝试过类似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 语句或告诉我它是否不存在吗?我试过 RTFM,但找不到任何东西(在 sqlite 网站上搜索 OR 会吐出一堆错误!)。
谢谢!
最佳答案
这将是其中之一:
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 也不知道您的意思并读取“if fname 等于 'Elvis' or... true”。它将字符串评估为 bool 值,我假设因为它不为空,所以评估为 true。并继续从您的表格中选择每一行,正如我之前所说。
关于Python:sqlite OR 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4221956/
我是一名优秀的程序员,十分优秀!