【发布时间】:2015-04-09 13:47:37
【问题描述】:
我有一个很简单(我觉得很简单,但我还在苦苦挣扎!)的问题。我有一张汽车表。我还有另一张汽车等级表。我想加入一个到另一个为汽车上课。
汽车表很简单,有型号和品牌。类表也有一个模型和一个品牌和一个类的类型。当我想将相同品牌的汽车组合在一起时,就会出现问题,而不管它们的型号如何。
例如,我有两辆车:
id vehiclemake vehiclemodel
1 AUDI R8
2 AUDI Quattro
我有两个班级:
id vehiclemake vehiclemodel classtype
1 AUDI R8 A
2 AUDI NULL B
AUDI 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 类记录中
【问题讨论】:
-
在这种情况下你想得到什么输出?
-
SQLFiddle 链接:sqlfiddle.com/#!6/bf58e/1/0
-
在这种情况下,结果应该是:1 AUDI R8 1 AUDI R8 A 2 AUDI Quattro 2 AUDI NULL B
-
在车辆型号为空的表vehicleclass中,每个vehiclemake是否最多有1条记录?
-
是的,每个型号/车辆制造只有一条记录,其中型号/null 是全部
标签: sql tsql join sql-server-2008-r2 left-join