1

考虑以下数据结构:

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

“parking garages”是一张表,每个条目都是“garageCars”表的外键,该表包含车库中每辆车的一条记录。

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

我尝试使用带有计数的 HAVING 子句,但这会返回所有超过 1 辆汽车的行。我需要更多类似“WHERE count(car) > 1 and car.color = car.color”的东西。

4

1 回答 1

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

于 2011-11-07T20:03:35.740 回答