zoukankan      html  css  js  c++  java
  • 关于多表的leftJoin(转)

    建立表结构如下:

    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谁了。

  • 相关阅读:
    面向对象之单例模式
    面向对象之元类
    面向对象高级1
    面向对象进阶2
    面向对象进阶1
    面向对象基础
    MySQL事务
    【应用容器引擎】Docker笔记
    【Spring Boot】三、嵌入式的Servlet容器
    MySQL优化分析
  • 原文地址:https://www.cnblogs.com/huideng/p/4408997.html
Copyright © 2011-2022 走看看