zoukankan      html  css  js  c++  java
  • Mysql-多个left join 计算逻辑

    单个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
    生活其实也很简单,喜欢的就去争取、得到的就珍惜、失去的就忘记。
  • 相关阅读:
    《移动WEB前端高级开发实践@www.java1234.com.pdf》【2】
    《生鲜零售智能化之路》
    房屋布局分析《Physics Inspired Optimization on Semantic Transfer Features: An Alternative Method for Room Layout Estimation》
    《2018:skymind.ai 发布了一份非常全面的开源数据集》
    Flask/Tornado/Django
    《特征提取与图像处理》
    《icra16_slam_tutorial_tardos.pdf》
    《3D_Deep_Learning_for_Robot_Perception.pdf》
    《深度访谈:华为开源数据格式 CarbonData 项目,实现大数据即席查询秒级响应》
    数据库性能测试
  • 原文地址:https://www.cnblogs.com/Formulate0303/p/13992755.html
Copyright © 2011-2022 走看看