注意我假设您的架构如下:
- 类型:snr,nsname
- 饮食:snr,foodnr
- 食物:foodnr,食物类型
您可以使用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