我有一张桌子。我想开发一个查询,如果ID有多个记录,则过滤掉Dog记录。如果该ID只有1条记录,则保留狗的记录。
ID | AnimalType
401 | Dog
401 | Cat
401 | Bird
402 | Dog
403 | Cat
404 | Dog
404 | Bird
查询结果将是......
ID | AnimalType
401| Cat
401| Bird
402| Dog
403| Cat
404| Bird
答案 0 :(得分:1)
以下是实现此目的的一种方法:
SELECT A.ID, A.AnimalType
FROM tblAnimals A
INNER JOIN ( SELECT ID, COUNT(1) as IDCount FROM tblAnimals GROUP BY ID ) T
ON A.ID = T.ID
WHERE NOT (T.IDCount>1 and A.AnimalType='Dog')
基本思想是在子查询中获取每个记录ID的计数,然后如果“动物是狗并且该ID有多个记录”,我们可以应用过滤掉案例的确切逻辑。 / p>
演示: http://www.sqlfiddle.com/#!6/db6a9/2 (在SQL Server中,不是Access,但逻辑相同)
答案 1 :(得分:1)
实现此目的的另一种方法是在您查看狗记录时使用NOT EXISTS
函数来确定是否存在同一ID的其他动物:
SELECT ID, AnimalType
FROM Animals t1
WHERE AnimalType <> 'Dog' Or NOT EXISTS ( SELECT ID FROM Animals t2 WHERE t2.ID = t1.ID And AnimalType <> 'Dog' );