我有一个用户名和类别表和我有查询:简单的SQL问题帮助
select * from articles where username='333' or username='222' and category='movies'
我想这是从用户的“333”和“222”,这是从只返回记录'电影'类别,但是这会返回来自所有类别的所有用户的文章。
我在做什么错?
我有一个用户名和类别表和我有查询:简单的SQL问题帮助
select * from articles where username='333' or username='222' and category='movies'
我想这是从用户的“333”和“222”,这是从只返回记录'电影'类别,但是这会返回来自所有类别的所有用户的文章。
我在做什么错?
SELECT *
FROM articles
WHERE (username='333' OR username='222')
AND category='movies'
select * from articles where (username='333' or username='222') and category='movies'
你希望它被解析:
select * from articles where (username='333' or username='222') and category='movies'
而是将其解析:在
select * from articles where username='333' or (username='222' and category='movies')
认沽括号,它会做正确的事。
可能是你缺乏括号。如果你更明确,像这样:
select * from articles where (username='333' or username='222') and category='movies'
那么你应该没问题。
还有一个IN
关键字,所以你可以做:
select * from articles where username in ('333', '222') and category='movies'
操作precedure。您可能需要阅读手册。并结合更紧密的(优先级高于)“OR”,因此,您的查询被解析为
select *
from articles
where username = '333' or (username = '222' and category = 'movies')
您需要使用括号来明确指定你想要的操作顺序:
select *
from foo
where (user = 'a' or user = 'b')
and category = 'c'
或者,使用in
:
select *
from foo
where user in ('a','b')
and category = 'c'
这可能有助于使用IN关键字而不是AND/OR。
select *
from articles
where username in ('333','222') and category='movies'
IN允许您指定一个值列表。
此外,如果你想要MIX AND/OR,请确保你括起来。如果不包括它们,则大多数主要RDBMS中的优先是AND之前的AND(围绕ANDS)。
select *
from articles
where (username = '333' or username = '222') and category='movies'
正如你可以从这里看到(Operator Precedence (TSQL 2005),AND
在7号进来,而OR
在第进来8
由几秒钟,欢呼声 – 2011-02-08 19:40:29