2011-02-08 16 views
2

私は、ユーザー名とカテゴリを持つテーブルがあると私は、クエリを持っている:単純なSQL質問ヘルプ

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

は、私は、これは、ユーザーの333 'とからある「222」からレコードだけを返すようにしたいです'movies'カテゴリがありますが、これはすべてのカテゴリのユーザーからのすべての記事を返します。

私は間違っていますか?

答えて

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

で入って来は、数秒で歓声 –

+0

@K Ivonov私を打つ - あなたは答えは4述べています分。前に、クリスは5分前に私の上に言う –

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。マニュアルを読むことをお勧めします。そして、あなたは明示的にしたい操作の順序を指定するには、括弧を使用する必要があるので、あなたのクエリが

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

として解析されている、(よりも優先順位が高い)「OR」タイトバインド:

代わり
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

AND/ORの代わりにINキーワードを使用すると役立つことがあります。

INでは、値のリストを指定できます。

また、MIXとAND/ORを括弧で囲んでください。大括弧で囲まないと、ほとんどの主要なRDBMSのの優先順位は、ORの前のANDです(ANDSを囲む括弧)。

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

ここ(Operator Precedence (TSQL 2005)から見ることができるように、ANDORのに対し、7番で入ってきたが、数8