左联接问题,请指教
A表
学号 教材编号 课程编号
0001 1 a
0002 2 b
B表
教材编号 课程编号 课程性质
1 a 必修
1 b 选修
想用左联结通过 教材编号 关联
slect A表.学号,B表.课程性质 from A表 left join B表 on A表.教材编号=B.教材编号
问题:这样出来的记录会操过A表的总记录数,原因是B表同一教材编号有两种课程性质,我想与B关联时就只查找到B表匹配的第一条记录就可以了,这样行不行啊?
------解决方案--------------------课程编号不关联?
------解决方案--------------------create table A(学号 varchar(10),教材编号 varchar(10),课程编号 varchar(10))
create table B(教材编号 varchar(10),课程编号 varchar(10),课程性质 varchar(10))
insert A select '0001 ', '1 ', 'a '
union all select '0002 ', '2 ', 'b '
insert B select '1 ', 'a ', '必修 '
union all select '1 ', 'b ', '选修 '
select * into #t from
(
select 教材编号,课程性质 from B a where 课程性质 =
(
select top 1 课程性质 from B
where 教材编号=a.教材编号
)
)t
select A.学号,#t.课程性质 from A left join #t on A.教材编号=#t.教材编号
drop table A,B,#t
学号 课程性质
---------- ----------
0001 必修
0002 NULL
(所影响的行数为 2 行)
------解决方案--------------------LS的方法不可取,我觉得应该是要多一个关联关系,如wgzaaa() 所说的,要课程编号也同时关联,要不然取道的结果也不合常理。
------解决方案--------------------slect A表.学号,B表.课程性质 from A表 left join B表 on A表.教材编号=B.教材编号
and A表.课程编号=B.课程编号
------解决方案--------------------如果没有课程编号.关联..取到的数据也不完善把...