2

このクエリの作成を手伝っていただければ幸いです。運が悪かったので、いくつかの方法を試しました。私の質問は私には言いにくいので、私がやりたいことの簡単な例を作ります。次のような構造のデータがあります。

ID  TYPE  COLOR
1   A     Blue
1   B     Red
1   C     Green
2   C     Blue 
2   B     Green 

2 つの特定の色を持つ ID がある場合に、型を返すクエリを作成したいと考えています。たとえば、青と赤の両方を持つ ID をすべて見つけたいとします。クエリは次を返します。

1, A , B 

A と B が返される順序は重要ではありません。データ セットは大きいので、多くの ID が両方の条件に一致すると予想されます (おそらく 50,000 程度)。タイプは色と相関しないため、問題はこの他のスタックオーバーフローの質問この質問とは異なることに注意してください。

ある種のサブクエリを実行する必要があると思います。しかし、本当にどうすればいいのかわからない、ありがとう。

4

1 に答える 1

5
SELECT ID, TYPE FROM types NATURAL JOIN (
  SELECT ID FROM types GROUP BY ID HAVING SUM(COLOR='Red') AND SUM(COLOR='Blue')
) t WHERE COLOR IN ('Red', 'Blue')

sqlfiddleで参照してください。

または、タイプを区切り文字列に連結しても問題ない場合は、1 つのパスで目的のデータを抽出できます。

SELECT   ID, GROUP_CONCAT(TYPE)
FROM     types
WHERE    COLOR IN ('Red', 'Blue')
GROUP BY ID
HAVING   COUNT(*) = 2

sqlfiddleで参照してください。

テーブルに同じ(ID, COLOR)ペアを持つ複数のレコードが含まれている可能性がある場合COUNT(*)は、より高価な に置き換える必要があることに注意してくださいCOUNT(DISTINCT COLOR)

于 2012-11-08T23:26:14.740 に答える