日期:2014-05-18  浏览次数:20479 次

左联接问题,请指教
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.课程编号
------解决方案--------------------
如果没有课程编号.关联..取到的数据也不完善把...