多個left join的疑問

測試數據a表id1-10,b表id5-12,c表id2-11

目的:找到滿足a表不滿足b表滿足c表的id(應該是2,3,4) 

use test;
create table testtesta (id bigint);
insert into testtesta values (1);
insert into testtesta values (2);
insert into testtesta values (3);
insert into testtesta values (4);
insert into testtesta values (5);
insert into testtesta values (6);
insert into testtesta values (7);
insert into testtesta values (8);
insert into testtesta values (9);
insert into testtesta values (10);
create table testtestb (id bigint);
insert into testtestb values (5);
insert into testtestb values (6);
insert into testtestb values (7);
insert into testtestb values (8);
insert into testtestb values (9);
insert into testtestb values (10);
insert into testtestb values (11);
insert into testtestb values (12);
create table testtestc (id bigint);
insert into testtestc values (2);
insert into testtestc values (3);
insert into testtestc values (4);
insert into testtestc values (5);
insert into testtestc values (6);
insert into testtestc values (7);
insert into testtestc values (8);
insert into testtestc values (9);
insert into testtestc values (10);
insert into testtestc values (11);

先看一下多次left join

select *
FROM testtesta
left join testtestb 
on testtesta.id = testtestb.id 
left join testtestc 
on testtesta.id=testtestc.id;

left join ... on t1.id = t2.id 說明t1裏的所有值跟t2裏的值去匹配。
同理: on t1.id = t3.id 說明t1裏的所有值跟t3裏的值去匹配。
t3其實跟t2沒有任何關聯,它們都是跟t1關聯 

注意:要實現這種效果一定要每次left join的時候都是a表的id去連接

如果這樣寫

select *
FROM testtesta
left join testtestb 
on testtesta.id = testtestb.id 
left join testtestc 
on testtestb.id=testtestc.id;

結果就是:

 這樣本來c應該和b沒關係的也變成有關係的了

回到問題的起點:

找到滿足a表不滿足b表滿足c表的id(應該是2,3,4) 

select *
FROM testtesta
join testtestb 
on testtesta.id = testtestb.id 
left join testtestc 
on testtesta.id=testtestc.id;

這樣紫呢 其實有了join 只有ab的交集了 所以就算後面是left join 也是和前的交集left 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章