私は3つのテーブルを持っています:
player [id, name]
attribute [id, name]
player_attribute [id, player_id, attribute_id, value]
各プレイヤーは異なる属性を持つことができますが、属性を持たないプレイヤーもいます。次に、特定の属性を持つプレーヤーを検索する必要があります。たとえば、番号が 11 で名前が John であるすべてのプレーヤーです。この時点で、これらの属性の ID もわかっwhere
ています。クエリの一部は次のようになります。WHERE (attribute.id, attribute.value) in ((5, '11'), (18, 'John'))
要求されたすべての属性を満たすすべてのプレーヤーを取得する必要があります。
問題は、クエリ全体がどのように見えるべきかわからないことです。結合、ネストされた選択、グループ化を試みましたが、機能させることができません。私はいつも行が多すぎるか、十分ではありません。
助けてください。
編集 aranid のおかげで解決策が見つかりました:
select player_id from (
select * from player_attribute where (attribute.id, attribute.value) in ((5, '11'), (18, 'John')))
group by player_id
having count(*) = 2
したがって、キーワードはhaving by
適切に使用されました:)上記のクエリをステートメント
に変換する方法はありますか?JOIN