2
SELECT  snr, nsname FROM type
WHERE snr in (SELECT snr FROM diet 
WHERE foodnr in (SELECT foodnr FROM food WHERE foodtype = 'FISH' ));

私のデータベースには、同じ種類の食べ物を食べるが、異なる種類の食べ物を食べる動物が他にもいます。その種類の食べ物だけを食べ、他には何も食べない動物を取得するにはどうすればよいですか。

私のデータベース全体がなければ、これは答えることができません

4

2 に答える 2

3

JOIN代わりに、次のようにテーブルを使用します。

SELECT t.snr, t.nsname 
FROM type t 
INNER JOIN diet d ON t.snr = d.snr
INNER JOIN food f ON t.foodnr = f.foodnr
WHERE t.foodtype = 'FISH'
GROUP BY t.foodtype
HAVING COUNT(DISTINCT t.foodtype) = 1;
于 2012-12-10T15:36:44.463 に答える
1

注: スキーマについて次のことを前提としています。

  • タイプ: 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
于 2012-12-10T15:41:57.460 に答える