关于多表的leftJoin
2015-09-01 19:13
155 查看
建立表结构如下:
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谁了。
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谁了。
相关文章推荐
- Plugin动态加载Extension,达到plugin.xml中配置的效果
- Oracle数据库直连IO异常,更改localhost为本机IP地址后运行正常
- mvc EF 执行SQL语句
- [leetcode 226] Invert Tree
- HTML URL 编码
- JSON.stringify
- xilinx zynq-7000 基本知识
- 在Ubuntu Kylin中使用SVN管理代码
- 敌兵布阵
- Factorial Trailing Zeroes
- linux常用命令(16):which命令
- 第一篇 演示如何访问 Email 字段 并调用出来
- 关于ListView循环播放的一些事情
- IOS科研IOS开发笔记学习基础知识
- 一个关于四位数猜想的验证
- eclipse上安装sonarqube插件
- LeetCode题解——Valid Sudoku
- uva644-字符串
- 获取程序运行时间以判别算法优劣
- Linux mysql 以及sql 语句的使用