サプライヤとアイテムの関係を示す表があります。私はあなたにもすべてのサプライヤーが一覧表示されますSuppliers
テーブルを持っている(と、それは主キーIDを持っている)推測項目1および2必要なものをすべて供給しているサプライヤーだけを選ぶには?
tablepk supplierpk itempk
1 1 1
2 1 2
3 2 1
サプライヤとアイテムの関係を示す表があります。私はあなたにもすべてのサプライヤーが一覧表示されますSuppliers
テーブルを持っている(と、それは主キーIDを持っている)推測項目1および2必要なものをすべて供給しているサプライヤーだけを選ぶには?
tablepk supplierpk itempk
1 1 1
2 1 2
3 2 1
の両方を持っているサプライヤを取得したいです。もしそうなら、あなたは(あなたが名前を指定していないので、私はそれSupplierItems
と呼ばれる)は、関連するテーブルを確認するために、2つのEXISTS
ステートメントを使用することができますitempk=1
を持つレコードとitempk=2
SELECT s.*
FROM Suppliers s
WHERE
EXISTS (SELECT 1 FROM SupplierItems si1 WHERE si1.supplierpk = s.id and si1.itempk = 1)
AND
EXISTS (SELECT 1 FROM SupplierItems si2 WHERE si2.supplierpk = s.id and si2.itempk = 2)
tablepkを取り除くの両方を持っています。それは目的を果たさない。代わりに、残りの列は主キーです。
SELECT supplierpk
FROM supplieritems
WHERE itempk IN (1,2)
GROUP BY supplierpk
HAVING COUNT(*) = 2;
たとえば、9個のアイテムがあるサプライヤを探す必要がないとしましょう。 – Strawberry