注: スキーマについて次のことを前提としています。
- タイプ: snr、nsname
- 食事: snr、foodnr
- FOOD: foodnr、foodtype
次を使用できますNOT EXISTS
。
SELECT t.snr, t.nsname
FROM type t
INNER JOIN diet d ON t.snr = d.snr
INNER JOIN food f ON d.foodnr = f.foodnr
WHERE f.foodtype = 'FISH'
AND NOT EXISTS
(
SELECT 1
FROM diet dd
INNER JOIN food ff ON dd.foodnr = ff.foodnr
WHERE ff.foodtype <> 'FISH'
AND dd.snr = t.snr
)
または、結合防止パターンを使用できます。
SELECT t.snr, t.nsname
FROM type t
INNER JOIN diet d ON t.snr = d.snr
INNER JOIN food f ON d.foodnr = f.foodnr AND f.foodtype = 'FISH'
LEFT OUTER JOIN diet dd ON t.snr = dd.snr AND f.foodnr <> dd.foodnr
WHERE f.foodtype = 'FISH'
AND dd.snr IS NULL