1

我有一个看起来像这样的表:

Person (Ssn, Name, Age, Petname)

我需要形成一个问题,返回与 Ssn = 1 的人拥有相同数量宠物的所有人的姓名(即,如果 Ssn = 1 的人在 Petname 中有 Petname = "Zeus",那么所有的人也有宠物应归还)。我知道桌子设计很愚蠢,但它来自学校作业,必须看起来像那样。

这就是我到目前为止所得到的。我认为它部分正确,但我似乎无法完全弄清楚:

SELECT Name 
FROM   Person 
WHERE (SELECT COUNT(Petname) FROM Person WHERE Ssn = '1')
       = (SELECT COUNT(Petname) FROM Person WHERE Ssn != '1');
4

3 回答 3

2

这应该可以解决问题:

SELECT Name
FROM Person
WHERE SSN <> 1
GROUP BY Name
HAVING COUNT(PetName) = (SELECT COUNT(PetName) FROM PERSON WHERE SSN='1')

这里也是一个带有代码的SQLFiddle

于 2013-10-11T12:21:41.900 回答
0

尝试这个

select Name from Person 
group by Name 
having 
sum(case when Pnr = '1' then 1 else 0 end) = sum(case when Pnr <> '1' then 1 else 0 end)
于 2013-10-11T12:19:13.103 回答
0

假设一个人只有一只且只有一只宠物。

SELECT 
    Name
FROM 
    Person 
WHERE 
    PetName = (SELECT Petname FROM Person WHERE Ssn = 1)
    AND Ssn <> 1
于 2013-10-11T12:21:48.210 回答