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

在我的数据库中有更多的动物吃同一种食物但吃不同类型的食物,我如何得到只吃那种食物而不吃其他食物的动物。

呸,如果没有我的整个数据库,这是不可能回答的,我觉得只是问这个问题就像个混蛋,因为它太模糊了,但我想做的是我需要过滤掉除了 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
  • 食物: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
于 2012-12-10T15:41:57.460 回答