两表连接,如果连接的表中有两条以上匹配的记录,只选出第一条

 


A表
empid  name 
A01    tom
A02    mary
A03    gary

B表
ClassID  empid  cname
C01       A01    english
C02       A01    math
C03       A02    physics

想要结果:
empid  classid  name  cname
A01     C01     tom   english
A02     C03     mary  physics
A03     NULL  gary    NULL

 

正解一: 

declare   @t1   table (empid  varchar ( 10 ),name  varchar ( 10 ))
insert   @t1   select   ' A01 '   ,   ' tom '  
insert   @t1   select   ' A02 '   ,   ' mary '  
insert   @t1   select   ' A03 '   ,   ' gary '

declare   @t2   table (classid  varchar ( 10 ),empid  varchar ( 10 ),cname  varchar ( 10 ))
insert   @t2   select   ' C01 '    ,     ' A01 '   ,   ' english '  
insert   @t2   select   ' C02 '    ,     ' A01 '   ,   ' math '  
insert   @t2   select   ' C03 '    ,     ' A02 '   ,   ' physics '

select  
a.empid,b1.classid,a.name,b1.cname 
from   @t1  a
left   join   @t2  b1
on  a.empid = b1.empid  and   not   exists  ( select   1   from   @t2   where  empid = b1.empid  and  classid < b1.classid)

-- 结果
empid      classid    name       cname      
-- -------- ---------- ---------- ---------- 
A01        C01        tom        english
A02        C03        mary       physics
A03        
NULL        gary        NULL

(所影响的行数为 
3  行)

 正确二: 

declare   @t1   table (empid  varchar ( 10 ),name  varchar ( 10 ))
insert   @t1   select   ' A01 '   ,   ' tom '  
insert   @t1   select   ' A02 '   ,   ' mary '  
insert   @t1   select   ' A03 '   ,   ' gary '

declare   @t2   table (classid  varchar ( 10 ),empid  varchar ( 10 ),cname  varchar ( 10 ))
insert   @t2   select   ' C01 '    ,     ' A01 '   ,   ' english '  
insert   @t2   select   ' C02 '    ,     ' A01 '   ,   ' math '  
insert   @t2   select   ' C03 '    ,     ' A02 '   ,   ' physics '
-- select 1 from @t2 tmp where empid=tmp.empid and classid<tmp.classid
--
select * from @t2 tmp where not exists (select 1 from @t2 where empid=tmp.empid and classid<tmp.classid)

select  t1.empid,t2.classid,t1.name,t2.cname
from   @t1  t1
left   join  ( select   *   from   @t2  tmp  where   not   exists  ( select   1   from   @t2   where  empid = tmp.empid  and  classid < tmp.classid)) t2
on  t1.empid = t2.empid
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值