日期:2014-05-17  浏览次数:20385 次

突然傻了,怎么会这样?
一般用left join 就是以左边的表为主。左边有几天,就出来几条。
比如表A有1条记录,表B同字段值的有3条。A left outer join B,那么出来的应该是1条记录。

为什么我实验的结果不是你?

create table atest(aid int ,aids int)
insert into atest(aid,aids) values(1,1)

create table btest(bid int,bids int)
insert into btest(bid,bids) values(1,1)
insert into btest(bid,bids) values(2,1)
insert into btest(bid,bids) values(3,1)

select a.aid,a.aids,b.bid,b.bids from atest a left outer  join btest b
on a.aids=b.bids


出来的结果是3条记录。

改怎么样才出来一条记录?

------解决方案--------------------
on a.aids=b.bids,链接条件,你自己看看,有多少个符合这个条件的
------解决方案--------------------
你的理解错了,如果右表不能找到匹配项,那么会以null出现,所以你的例子中应该会有3条
------解决方案--------------------
右边有3个bids都是1,所以出来三条。
你把连接条件改一下结果就是一条了啊on a.aid=b.bid 
------解决方案--------------------
LEFT JOIN操作,相当于两个表先做INNER JOIN后,再把左边没关联上的记录附加到结果集的最后,并且右边表的所有字段以NULL填充。
再来说说INNER JION,如果左边表有2条记录和右边表3条记录都能匹配的上,那么就是2X3=6条记录。也就是说,INNER JION的记录数是N1xN2,当然是建立在可关联上的基础上。
------解决方案--------------------
左连接是从第一条到最后一条逐条和右边所有数据对比,存在即产生一条数据
------解决方案--------------------
你对left join理解不深,其实不是说采用左联接就是如果左边只有一条记录,那么最后结果就是一条记录。而是以左边为主表满足条件的记录数,你上面写的SQL明显是有三条满足。如果你要想只有一条记录,那么就应该on里面用bid关联。