2011-02-08 89 views
2

我有一個用戶名和類別表和我有查詢:簡單的SQL問題幫助

select * from articles where username='333' or username='222' and category='movies' 

我想這是從用戶的「333」和「222」,這是從只返回記錄'電影'類別,但是這會返回來自所有類別的所有用戶的文章。

我在做什麼錯?

回答

3
SELECT * 
    FROM articles 
    WHERE (username='333' OR username='222') 
     AND category='movies' 
+0

由幾秒鐘,歡呼聲 – 2011-02-08 19:40:29

3
select * from articles where (username='333' or username='222') and category='movies' 
0

你希望它被解析:

select * from articles where (username='333' or username='222') and category='movies' 

而是將其解析:在

select * from articles where username='333' or (username='222' and category='movies') 

認沽括號,它會做正確的事。

2

可能是你缺乏括號。如果你更明確,像這樣:

select * from articles where (username='333' or username='222') and category='movies' 

那麼你應該沒問題。

還有一個IN關鍵字,所以你可以做:

select * from articles where username in ('333', '222') and category='movies' 
2

操作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' 
3

這可能有助於使用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