我想选择一个user_id为1的user_id,category_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;...But它不工作。
发布于 2012-05-15 06:35:02
这是因为在SQLite中,AND操作符具有比OR更高的优先级(参见此SQLite文档页面上的运算符部分)
这意味着SQLite首先计算category_id=6 AND user_id = 1表达式,然后计算ORs的结果和所有其他category_id条件。
因此,查询返回所有记录,其中category_id为1、2、3、4或5,或category_id为6,user_id为1。
您应该添加括号,以强制首先对ORs进行评估:
SELECT record_id
FROM tbl_people
WHERE
(
category_id=1 OR
category_id=2 OR
category_id=3
)
AND user_id = 1;或者,您可以使用SQL IN运算符使其更简洁:
SELECT record_id
FROM tbl_people
WHERE category_id IN (1, 2, 3)
AND user_id = 1;另外,请注意,您有一个错误:在WHERE子句中有一个category=id__,它可能应该是category_id__。
更新:这里有一个查询测试链接:http://www.sqlfiddle.com/#!7/d7ad3/1
https://dba.stackexchange.com/questions/17860
复制相似问题