在相关表中查找重复记录

时间:2011-11-07 19:56:25

标签: sql sql-server tsql having

考虑以下数据结构:

parking garages
    |
    |_ garage 1
        |__ red car
        |__ blue car
    |_ garage 2
        |__ yellow car
        |__ orange car
    |_ garage 3
        |__ red car
        |__ red car
        |__ yellow car

“停车库”是一张桌子,每个条目都是“garageCars”表的外键,其中包含车库中每辆车的一条记录。

我想做的是写一个返回“车库3”的查询,因为它有2辆红色汽车

我已尝试将HAVING子句与count一起使用,但这会返回所有超过1 car的行。我需要更多的东西“WHERE count(car)> 1和car.color = car.color”。

1 个答案:

答案 0 :(得分:3)

假设你只想要车库名称,而不是那种被欺骗的颜色,因为你想要“...将返回的查询”车库3“因为它有2辆红色汽车”

使用派生表

SELECT g.garagename 
FROM   garage g 
       INNER JOIN (SELECT garage_id 
                   FROM   cars 
                   GROUP  BY garage_id, 
                             carcolor 
                   HAVING COUNT(garage_id) > 1) c 
         ON g.garage_id = c.garage_id 

使用IN

SELECT g.garagename 
FROM   garage g 
WHERE  g.garage_id IN (SELECT garage_id 
                       FROM   cars 
                       GROUP  BY garage_id, 
                                 carcolor 
                       HAVING COUNT(garage_id) > 1) 

你也可以用EXISTS,CROSS APPLY或CTE

来做