单个left join:

(1)一对一:结果表的行数=左表行数

(2)一对多:结果表的行数>左表行数

多个left join:

(0)多个left join由上到下,依次生成查询表,原理同单个left join

(1)需要补充的是,如果在left join a表之前,想先对a表做一个字段的筛选,不能在多个left join之后用where来条件过滤,因为,多个left join是优先于where执行的,如果用where是对多个left join之后的结果查询表进行的条件过滤。(这种很容造成结果错误,也就是结果数据不全)

应该用,left join ON 后+"and"去先过滤

a left join b ON a.id=b.id and a.isdel =0 b.status =1

left join c ON a.id =c.id and c.type=3

PS:有时候,单个left join、多个left join 需要跟select配合套多个"select马甲"使用,下边是一个很不错的常用模版套法:

(一般对于不知道什么时候起别名 什么时候用括号的老铁们 真实头疼  所以发个模板,可以根据自己的需求,进行套用)

https://www.cnblogs.com/LHWorldBlog/p/7753914.html

不多说 直接上语句   
SELECT
    a.id,
    a.thumbNail,
    a. NAME,
    a.marketPrice,
    a.memberPrice,
    a.personName,
    a. STATUS,
    a.recieveOrderDate,
    a.trackNumber,
    a.contact,
    a.reportSendDate,
    b.trackNumber,
    a.reportDownloadPath
FROM
    (
        SELECT
            od.id,
            ps.thumbNail,
            ps. NAME,
            od.marketPrice,
            od.memberPrice,
            od.personName,
            od. STATUS,
            od.recieveOrderDate,
            ol.trackNumber,
            ol.contact,
            od.reportSendDate,
            od.reportSendOrderLogisticId,
            od.reportDownloadPath
        FROM
            orders.order_detail od
        LEFT JOIN orders.order_logistics ol ON od.recieveOrderLogisticId = ol.id
        LEFT JOIN orders.product_snapshot ps ON od.productSnapShotId = ps.id
        WHERE
            od.valid = TRUE
        AND ol.valid = TRUE
        AND od.orderId =?
    ) a
LEFT JOIN (
    SELECT
        ol.trackNumber,
        od.id
    FROM
        orders.order_detail od
    LEFT JOIN orders.order_logistics ol ON od.reportSendOrderLogisticId = ol.id
    WHERE
        od.valid = TRUE
    AND ol.valid = TRUE
    AND od.orderId =?
) b ON a.id = b.id

Mysql-多个left join 计算逻辑的更多相关文章

  1. MySQL的联结(Join)语法

    MySQL的联结(Join)语法 1.内联结.外联结.左联结.右联结的含义及区别:   在讲MySQL的Join语法前还是先回顾一下联结的语法,呵呵,其实连我自己都忘得差不多了,那就大家一起温习吧(如 ...

  2. Mysql 中Left/Right join on后面and和where条件查询的差异-Mysql SQL运算符是有优先级

    一.Mysql中Left/Right join on后面and和where条件查询的差异 1.建两张测试表,一张商户定义表.一张商户操作状态明细表 1)商户定义表 CREATE TABLE hope. ...

  3. MySQL连接查询(inner join,left join和right join的区别)

    关系数据库由多个相关表组成,这些表使用已知为外键列的常用列链接在一起. 因此,从业务角度来看,每个表中的数据是不完整的. 例如,在示例数据库(yiibaidb)中,使用orderNumber列链接的o ...

  4. MySQL中使用INNER JOIN来实现Intersect并集操作

    MySQL中使用INNER JOIN来实现Intersect并集操作 一.业务背景 我们有张表设计例如以下: CREATE TABLE `user_defined_value` ( `RESOURCE ...

  5. MySQL基础之STRAIGHT JOIN用法简介

    MySQL基础之STRAIGHT JOIN用法简介 引用mysql官方手册的说法: STRAIGHT_JOIN is similar to JOIN, except that the left tab ...

  6. Mysql查询优化器之关于JOIN的优化

    连接查询应该是比较常用的查询方式,连接查询大致分为:内连接.外连接(左连接和右连接).自然连接 下图展示了 LEFT JOIN.RIGHT JOIN.INNER JOIN.OUTER JOIN 相关的 ...

  7. 关于MySQL中的left join、on、where的一点深入

    原文地址:http://www.oschina.net/question/89964_65912?sort=default&p=3#answers 即使你认为自己已对 MySQL 的 LEFT ...

  8. Mysql INNER,LEFT ,RIGHT join的使用

    JOIN 按照功能大致分为如下三类: INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录. LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录. RIG ...

  9. MySQL全连接(Full Join)实现,union和union all用法

    MySQL本身不支持你所说的full join(全连接),但可以通过union来实现 ,下面是一个简单测试,可以看看: mysql> CREATE TABLE a(id int,name cha ...

  10. MySQL浅谈 LEFT JOIN

    On条件(在“A left join b on conditional_expr”)决定如何从table B 中检索数据行(Matching-State); 如果B中没有行匹配On 条件,额外的B的所 ...

随机推荐

  1. JavaAgent型内存马基础

    Java Instrumentation ​ java Instrumentation指的是可以用独立于应用程序之外的代理(agent)程序来监测和协助运行在JVM上的应用程序.这种监测和协助包括但不 ...

  2. CODING 助力江苏高速信息实现组织敏捷与研发敏捷,领跑智慧交通新基建

    疫情之下的高速公路管控重任 江苏高速公路信息工程有限公司(以下简称:江苏高速信息)成立于 2002 年,是江苏交通控股旗下,专业从事高速公路领域机电系统集成.智能交通软硬件研发.大数据分析运营的高新技 ...

  3. 热身训练1 Blood Cousins Return

    点此看题 简要题面: 一棵树上有n个节点,每个节点有对应的名字(名字可重复). 每次询问,求深度比$vi$多$ki$的$vi$的儿子中,有多少种名字 分析: Step1: 我们可以懂$DFS$轻松找到 ...

  4. stm32直流电机驱动与测速学习总结

    通过实验发现,定时器的一个通道控制一个pwm信号. 在正式开始之前也可以参考这个视频学习资料 (stm32直流电机驱动) http://www.makeru.com.cn/live/1392_1218 ...

  5. mdev 响应热插拔事件

    热插拔事件是从内核空间发送到用户空间的通知,一般这时候系统配置出现了变化,比如插入/移除耳机,插入/移除SD卡或者USB存储设备等. 热插拔事件默认会调用/sbin/hotplug来加载驱动程序,创建 ...

  6. JAVA笔记4__static关键字/对象数组/foreach/方法的可变参数

    /** * static关键字:修饰属性(实质就是全局变量).方法(无需本类的对象即可调用此方法).类. * 1.static方法只能调用static方法 * 2.static方法只能访问static ...

  7. docker 使用报错的相关问题

    docker 创建本地主机实例Virtualbox 驱动报错,显示没有下载这个驱动 解决方案,下载virtuabox. https://www.cnblogs.com/effortday/p/1502 ...

  8. Matlab画colormap的一种色彩搭配方法

    声学与振动数据分析经常需要画colormap,来识别是结构频率共振,还是激励源阶次问题,比如图1,横坐标表示电机的转速,负值表示CW(顺时针)方向转动,正值表示CCW逆时针方向转动.Y轴表示对应的声音 ...

  9. 『学了就忘』Linux基础命令 — 36、查看系统痕迹相关命令

    目录 1.w命令 2.who命令 3.last命令 4.lastlog命令 5.lastb命令 系统中有一些重要的痕迹日志文件,如/var/log/wtmp./var/run/utmp./var/lo ...

  10. 为什么不直接去Arraylist list = new Arraylist();而是直接通过List list = new ArrayList();使用接口的好处

    ArrayList不是继承List接口,是实现了List接口. 你写成ArrayList arrayList = new ArrayList();这样不会有任何问题.和List list = new ...