Sql server 返回可以是多种类型的行

Sql server 返回可以是多种类型的行,sql-server,Sql Server,好的,我已经找了两天了,没有找到任何东西。我认为这是一个简单的问题,我只是因为某种原因不能把我的头绕过去 假设你有两张桌子 汽车 CarID CarModel CarTypeID CarID TypeOfCar 目录类型 CarID CarModel CarTypeID CarID TypeOfCar 汽车的示例数据: CarID CarModel A Pinto B Corvette C Ferrari 目录类型的示例数据: CarTypeID Car

好的,我已经找了两天了,没有找到任何东西。我认为这是一个简单的问题,我只是因为某种原因不能把我的头绕过去

假设你有两张桌子

汽车

CarID
CarModel
CarTypeID
CarID
TypeOfCar
目录类型

CarID
CarModel
CarTypeID
CarID
TypeOfCar
汽车的示例数据

CarID CarModel
A      Pinto 
B      Corvette
C      Ferrari
目录类型的示例数据

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对多的关系(一辆车可以有许多不同的类型)。我不能用sql来描述所有汽车都是“小鸡磁铁”和“耗油车”的情况

所需结果集:

CarID CarModel
A     Pinto
C     Ferrari
任何帮助都将不胜感激。我正在使用SQL Server。我可以使用“喜欢”和“文本”搜索,但希望避免这种情况

这里有一种方法:

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'
这里有一个方法:

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'


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

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

你需要与这两个表进行连接,并使用where子句来选择你想要选择的汽车类型有重复的cartypeid可以吗?有两个3和7。@TrueSoft,经过编辑以更正CartypeID。您需要与这两个表进行联接,并使用where子句选择要选择的汽车类型。是否可以使用重复的CartypeID?有两个3和7。@TrueSoft,已编辑以更正CartypeId.Awesome。这对我来说很有意义。如果我继续吹出内部连接,这个比例会合适吗?比如说我想要100种类型的车。。。。更多的是出于兴趣而不是真正的需要(我最多需要4个)@OpenR-join很昂贵,所以伸缩性不是很好。如果你有少量的数据,这应该没问题。我没有投反对票,但只要斯图尔特的公式有效,随着你使用越来越多的类型,它的可伸缩性就会大大提高。但是,对于这个有限的数据集来说,这是一个清洗。这对我来说很有意义。如果我继续吹出内部连接,这个比例会合适吗?比如说我想要100种类型的车。。。。更多的是出于兴趣而不是真正的需要(我最多需要4个)@OpenR-join很昂贵,所以伸缩性不是很好。如果你有少量的数据,这应该没问题。我没有投反对票,但只要斯图尔特的公式有效,随着你使用越来越多的类型,它的可伸缩性就会大大提高。不过,对于这个有限的数据集来说,这是一个清洗。我从中学到了一些新的东西(如果聚合在Having子句中,那么groupby将起作用)。性能方面,哪一个更差:GROUPBY或多个内部联接所需的排序?事实上,分组将在大约15个不同的栏目上进行。无论是这个答案还是@Oded都有效(谢谢!),只要寻找两者中最具可伸缩性的。数据量在成千上万行中的10行中。阅读更多:@MizardX-感谢链接,它回答了我的问题。我从中学到了一些新的东西(如果聚合在Having子句中,groupby将起作用)。性能方面,哪一个更差:GROUPBY或多个内部联接所需的排序?事实上,分组将在大约15个不同的栏目上进行。无论是这个答案还是@Oded都有效(谢谢!),只要寻找两者中最具可伸缩性的。数据量在成千上万行中的10行中。阅读更多:@MizardX-感谢链接,这回答了我的问题。