HAVING
を使用して、必要な行がGROUP BY
の範囲内にあるかどうかを確認する簡潔な方法はありますか?必要な行を "持っている"ことによるSQLグループ
:私はHAVING COUNT(*) > 1
ような何かを行うことができます実現し、それが偽を与えるだろう
SELECT turtle.name
FROM turtle
JOIN turtle_crush ON turtle_crush.turtle_id = turtle.turtle_id
WHERE turtle_crush.crush_for IN ('Pizza', 'April Oneil')
GROUP BY turtle.turtle_id
HAVING (a crush on both "Pizza" and "April Oneil")
:
turtle_id name
1 Mike
2 Ralph
3 Leo
4 Don
と
turtle_id crush_for
1 Pizza
1 April Oneil
2 April Oneil
3 Pizza
3 April Oneil
4 Pizza
4 Pizza
4 Science
4 April Oneil
とSQL彼は「ピザ」を2度好きなので、ドン(ID 4)はポジティブです。
編集: ただ、彼がcrush_for
「ピザ」が
GROUP BYの前にWHEREを入れます。 – jarlh
@Strawberryそれは良い点イチゴです。理想的には文字列(「ピザ」など)は良好な主キーを作成せず、すべてのテーブルを正規化する必要がありますが、それによって質問が簡単になります。 – aero
@Strawberryより「正しい」シナリオでは、「INT」の主キーがそれぞれ1と2の「Pepperoni Pizza」や「Cheese Pizza」のようなものがあります。この2つのピザは、親カテゴリ "Food"に関連付けることができます。最初の質問では、少なくとも1つの「食べ物」アイテムと少なくとも1つの「人物」アイテムを酷使しているすべてのカメを返す方法を尋ねると、「親カテゴリ」テーブルに余分な「JOIN」が必要になりますおよび "items"テーブルを参照してください。 – aero