8

我正在尝试使用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 上的作品,所以现在我想重新调整我的问题的用途,询问为什么有效,但我的原始查询没有。

4

3 回答 3

10

用于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,则将选择每个元组。

于 2017-08-18T07:07:26.017 回答
1

使用IN而不是=喜欢,问题将得到解决:

SELECT * FROM Equipment WHERE ID IN (1 , 2);
于 2017-08-18T06:59:52.453 回答
1

AND意味着双方的条件都必须为真。但是对于任何单行,只能有一个ID值。

要检查多个值中的任何一个是否匹配,请替换ANDOR或使用IN

于 2017-08-18T07:08:02.283 回答