質問
私を困惑させるn:m関係の非常に単純な例。 2つのテーブル" Plant"があると仮定します。および「属性」また、IDとの関係を保持する別のテーブル:
Plant--------hasAttribute--------Attribute
P1 | A1
P1 | A2
P1 | A3
P2 | A1
P2 | A2
P3 | A2
P3 | A3
したがって、プラント1には属性1、2、および3があります。プラント2には属性1および2があり、プラント3には属性2および3があります。 今、1つのクエリで、どのように取得できますか?属性2および3を持つすべての植物? 結果はP1とP3を返します。どちらも属性2と3を持っているためです。 ユニオンを試していましたが、結果としてP2が得られます...何かアイデアはありますか?
解決
これはあなたが探しているものですか?
他のヒント
このクエリ構造により、個別の句が不要になります(解決テーブルに重複するレコードがない場合)。
SELECT p.PlantID
FROM
Plant p INNER JOIN PlantAttribute pa
ON p.PlantID = pa.PlantID AND pa.AttributeID = 1
INNER JOIN PlantAttribute pa2
ON p.PlantID = pa2.PlantID AND pa2.AttributeID = 2;
select * from Plants p where 2 = (
select count(*) from HasPlants h
where h.pid = p.id and h.aid in ( a2, a3 )
)
所属していません StackOverflow