首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单算子和多OR算子

单算子和多OR算子
EN

Database Administration用户
提问于 2012-05-15 05:15:53
回答 1查看 3.1K关注 0票数 3

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

在这里查看我的示例表:

我如何在SQL中做到这一点?我尝试了以下SQL语句:

代码语言:javascript
复制
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它不工作。

EN

回答 1

Database Administration用户

回答已采纳

发布于 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进行评估:

代码语言:javascript
复制
SELECT record_id 
FROM tbl_people 
WHERE 
(
    category_id=1 OR 
    category_id=2 OR 
    category_id=3
)
AND user_id = 1;

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

代码语言:javascript
复制
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

票数 6
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/17860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档