我有一個用戶名和類別表和我有查詢:簡單的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