我有一个非常简单(我认为这很简单,但我仍然在挣扎!)的问题。我有一张汽车表。我还有另一张汽车类别表。我想加入另一个以获得汽车的类别。
汽车表很简单,包含型号和品牌。类表还包含型号、品牌和类类型。当我想要将相同品牌的汽车分组在一起而不管其型号如何时,问题就出现了。
例如,我有两辆车:
id vehiclemake vehiclemodel
1 AUDI R8
2 AUDI Quattro
我有两个类(class):
id vehiclemake vehiclemodel classtype
1 AUDI R8 A
2 AUDI NULL B
奥迪 R8 将匹配 A 类类型。我希望所有其他 AUDI,无论其型号如何,都匹配 B 类类型。
我这里有一些示例代码,您可以尝试一下!
create table #vehicle(id int, vehiclemake varchar(10), vehiclemodel varchar(10))
create table #vehicleclass(id int, vehiclemake varchar(10), vehiclemodel varchar(10), classtype varchar(1))
insert into #vehicle values(1, 'AUDI', 'R8')
insert into #vehicle values(2, 'AUDI', 'Quattro')
insert into #vehicleclass values(1, 'AUDI', 'R8', 'A')
insert into #vehicleclass values(2, 'AUDI', null, 'B')
select
*
from
#vehicle v
left join #vehicleclass vc on
(v.vehiclemake = vc.vehiclemake and v.vehiclemodel = vc.vehiclemodel)
drop table #vehicle
drop table #vehicleclass
上面的语句没有将Quattro记录连接到B类记录
最佳答案
使用 COALESCE在 vehiclemodel
的连接上,这样当 vehicleclass
表上的模型为 NULL 时,车辆将改为匹配其自己的模型。
[编辑]:阅读用户的评论后,请尝试以下操作:
SELECT *
FROM #vehicle v
INNER JOIN #vehicleclass vc
ON v.vehiclemake = vc.vehiclemake
AND v.vehiclemodel = vc.vehiclemodel
UNION
SELECT *
FROM #vehicle v
INNER JOIN #vehicleclass vc
ON v.vehiclemake = vc.vehiclemake
AND vc.vehiclemodel IS NULL
WHERE NOT EXISTS(SELECT 1
FROM #vehicleclass vc2
where vc2.vehiclemake = v.vehiclemake
and vc2.vehiclemodel = v.vehiclemodel);
关于sql - 捕获连接表达式中的所有记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29540355/