我正在尝试使用WHERE
条件从我想要的行的ID中查询SQLite数据库中的特定行。但是,查询没有返回任何结果,它导致我的记录器抛出一个错误,指出存在语法错误。
以下是查询:
Select * From Equipment Where ID = 2 and ID = 3 and ID = 4 and ID = 7 and ID = 11 and ID = 34
以下是我日志中的语法错误:
Aug 17 2017 23:12:23 [Err]: Err002 - Query on Equipment could not be prepared: near "=": syntax error at File: c:\users\geowil\documents\visual studio 2015\projects\ov_pocs\universearc_poc\datasystem.cpp Line: 323.
所以我航行到SQLFiddle试着看看我是否错过了什么。它显示相同的行为。使用and
条件时,它不会返回任何结果 - 但对单个ID或一系列ID运行查询会起作用。
我做错了什么或者这是SQLite的限制?
更新
有脑波。使用Where ID IN(1,3,4)
可以在SQLFiddle上运行,所以现在我想重新调整我的问题以询问为什么这个有效,但我的原始查询没有。
答案 0 :(得分:5)
使用IN
选择多个元组。
Select * From Equipment Where ID IN (2, 3, 4, 7, 11, 34);
如果您的SQLite或数据库中存在每个ID,则会选择每个元组。
对于您的查询,您的逻辑等式永远不会选择其中一个元组,因为ID不会有两个或更多值(ID=2 AND ID=3
:如果ID
等于2
则赢了不等于3
)。在您的情况下,您必须使用OR
代替AND
。
Select * From Equipment Where ID=2 OR ID=3 OR ID=4 OR ID=7 OR ID=11 OR ID=34;
如果你的SQLite或数据库中存在每个id,那么将选择每个元组。
答案 1 :(得分:1)
使用IN
而不是=
之类的,问题将得到修复:
SELECT * FROM Equipment WHERE ID IN (1 , 2);
答案 2 :(得分:1)
AND
意味着双方的条件必须是真实的。但对于任何一行,只能有一个ID
值。
要检查与多个值中的任何一个匹配的匹配项,请将AND
替换为OR
,或使用IN
。