測試數據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