单个 AND 运算符和多个 OR 运算符

Jay*_*ayo 3 sqlite select

我想选择一个 user_id 为 1 和 category_id 的 record_id 可以是 1、2 或 3。每个 SELECT语句都应该返回 1 条记录。

在此处查看我的示例表:

我如何在 SQL 中做到这一点?我试过这个 SQL 语句:

SELECT record_id
FROM tbl_people
WHERE category_id=1 OR category=id=2 OR category_id=3
OR category_id=4 OR category_id=5 OR category_id=6 
AND user_id = 1;
Run Code Online (Sandbox Code Playgroud)

......但它不起作用。

Cri*_*scu 6

这是因为在 SQLite 中,AND运算符的优先级高于OR(请参阅此SQLite 文档页面上的运算符部分)

这意味着 SQLite 首先评估category_id=6 AND user_id = 1表达式,然后将OR其结果与所有其他category_id条件一起计算。

因此,您的查询将返回其中category_id为 1、2、3、4 或 5,或其中category_id为 6 且user_id为 1 的所有记录。

您应该添加括号以强制OR首先评估 s:

SELECT record_id 
FROM tbl_people 
WHERE 
(
    category_id=1 OR 
    category_id=2 OR 
    category_id=3
)
AND user_id = 1;
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用 SQLIN运算符使其更简洁:

SELECT record_id 
FROM tbl_people 
WHERE category_id IN (1, 2, 3) 
AND user_id = 1;
Run Code Online (Sandbox Code Playgroud)

另外,请注意您有一个错字:在您的WHERE子句中有一个category=id,它可能应该是category_id

更新:这是一个尝试查询的链接:http : //www.sqlfiddle.com/#!7/d7ad3/1