关于多表的leftJoin(转)

本文通过具体的表结构和数据插入示例,展示了两种不同左连接(LEFT JOIN)的使用方式及结果对比。总结了在不同场景下如何选择合适的连接方法。

建立表结构如下:

create table x.a (a1 int, a2 varchar(10));
create table x.b (b1 int, b2 varchar(10));
create table x.c (c1 int, c2 varchar(10));



insert into x.a values(    1  ,'haha');
insert into x.a values(    2  ,'ssss');
insert into x.a values(    4  ,'tttt');

insert into x.b values(    1  ,'cccc');

insert into x.c values(    2  ,'xxxx');

执行下面的两条left join:

select * from x.a a
        left join x.b b on a.a1=b.b1
        left join x.c c on a.a1=c.c1;
        
        
select * from x.a a
        left join x.b b on a.a1=b.b1
        left join x.c c on b.b1=c.c1;

实际上结果是不同的:

前者是:

1,haha,1,cccc,(null),(null)
2,ssss,(null),(null),2,xxxx
4,tttt,(null),(null),(null),(null)

后者是:

1,haha,1,cccc,(null),(null)
2,ssss,(null),(null),(null),(null)
4,tttt,(null),(null),(null),(null)

总结:

1. 无论left join怎么写,都是先用第一次left join的结果集,与第二个表进行left join。

2. 具体使用哪一种join方法,要依据表结构而定。 
    如果是a表中的某一个字段等于b表中的某一个字段,b表中的某一个字段等于c表中的某一个字段,那么我们就只能写成后一种形式。
    如果是a表中的某一个字段等于b表中的某一个字段,a表中的某一个字段等于c表中的某一个字段,那么我们就需要考虑先join谁了。

转载于:https://www.cnblogs.com/huideng/p/4408997.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值