返回可以是多种类型的行

时间:2011-11-14 20:39:02

标签: sql-server

好的,我已经搜索了两天但没找到任何东西。我认为这是一个简单的问题,我出于某种原因无法绕过它。

假设您有两张桌子。

汽车

CarID
CarModel

CarTypes

CarTypeID
CarID
TypeOfCar

Cars的示例数据:

CarID CarModel
A      Pinto 
B      Corvette
C      Ferrari

CarTypes的示例数据:

CarTypeID CarID TypeOfCar
1           A    ChickMagnet
2           A    FourDoor
3           A    GasGuzzler

4           B    SportsCar
5           B    TwoDoor
6           B    GasGuzzler

7           C    GasGuzzler
8           C    TwoDoor
9           C    ChickMagnet 

Car和CarType有1对多的关系(汽车可以有很多不同的类型)。我无法绕过那些需要显示所有“ChickMagnet”和“GAS Guzzler”汽车的sql。

结果集所需:

CarID CarModel
A     Pinto
C     Ferrari

非常感谢任何帮助。我正在使用SQL Server。我可以使用Like和Text搜索来完成它,但我想避免这种情况。

3 个答案:

答案 0 :(得分:3)

SELECT c.CarID, c.CarModel
FROM Cars c
INNER JOIN CarTypes ct
ON c.CarID = ct.CarID
WHERE ct.TypeOfCar IN ('ChickMagnet', 'GasGuzzler')
GROUP BY c.CarID, c.CarModel
HAVING COUNT(DISTINCT ct.TypeOfCar) = 2

答案 1 :(得分:2)

这是一种方式:

SELECT c.CarId, c.CarModel
FROM Cars c
  INNER JOIN CarTypes ct1 
     ON c.CarID = ct1.CarID
  INNER JOIN CarTypes ct2
     ON c.CarID = ct2.CarID
WHERE ct1.TypeOfCar = 'ChickMagnet'
  AND ct2.TypeOfCar = 'GasGuzzler'

答案 2 :(得分:0)

就在我的头顶,你不能使用CarID in()和CarID in()