2016-05-14 7 views
0

を検索するタグは、私は私のデータベースに次のテーブルを持っている: SQL - クエリ

ID name 
1 x 
2 x 
3 y 
1 y 
1 z 

は今、私はこれだけのオブジェクトを選択したい両方の「x」と「y」値のタグ名を持つ(IDの)。この場合、ID = 1のレコードのみが検索されます。これは、検索された値セット( 'x'と 'y')は、このレコードの可能な名前セット( 'x'、 'y'および 'z')のサブセットです。

SQLクエリの作成方法は?
助けてくれてありがとう:)

答えて

2

は一つの方法は、集計を使用しています。

select id 
from t 
where name in ('x', 'y') 
group by id 
having count(*) = 2; 

あなたはこれを比較したい場合がありますパフォーマンスを気にしている場合:

select id 
from t tx join 
    t ty 
    on tx.id = ty.id and tx.name = 'x' and ty.name = 'y'; 

最初のバージョンは簡単ですより多くのタグに一般化する。場合によっては、2番目の方がパフォーマンスが良いかもしれません。

+0

おそらく、最初のクエリの場合、 'Name'が' ID'に関して一意でなければ、これは問題ではありませんが、 'ID'が同じ'名前 '値。 2番目のクエリは、おそらくより理想的です。 – gmiley

+0

大変ありがとうございます!それは働いています:) – Wicia

+0

@gmiley。 。 。重複が問題であれば、 'count(distinct name)= 2'を使用してください。サンプルデータは重複が問題であるとは示唆していません。同様に、 'name'が' NULL'である場合、OPはそれらの値の扱い方を説明する必要があります。 –