これにより、最も一般的なサプライヤーを先頭にして、複数のアイテムに一致するサプライヤーのリストが表示されます。
SELECT SUPPLY.supplier, COUNT(SUPPLY.item) item_count
FROM BAG
JOIN SUPPLY
ON BAG.item = SUPPLY.item
GROUP BY SUPPLY.supplier
HAVING COUNT(SUPPLY.item) > 1
WHERE BAG.bag_id = ? --substitute bag_id
ORDER BY COUNT(SUPPLY.item) DESC
バッグ内のすべてのアイテムに一致するサプライヤーを見つける必要がある場合は、次のクエリを使用します。
SELECT SUPPLY.supplier
FROM BAG
JOIN (SELECT bag_id, COUNT(*) as item_count FROM BAG GROUP BY bag_id WHERE bag_id = ?) bag_count
ON BAG.id = bag_count.bag_id
JOIN SUPPLY
ON BAG.item = SUPPLY.item
GROUP BY SUPPLY.supplier
HAVING COUNT(SUPPLY.item) = bag_count.item_count
WHERE BAG.bag_id = ?
EXISTS
これをステートメントでラップすることにより、リストが空であるかどうかを確認して、共通のサプライヤーが存在しないかどうかを判断できます。