LEFT JOIN ON .. AND 小笔记

本文通过实例讲述了在SQL查询中LEFT JOIN ON 后使用AND条件与WHERE子句的区别。作者在开发中遇到问题,发现不正确使用会导致数据过滤。LEFT JOIN ON 后的AND是局部条件,影响JOIN过程,而WHERE后的条件是对整个结果集的进一步筛选。理解这一差异对于正确构造LEFT JOIN查询至关重要。
摘要由CSDN通过智能技术生成

在实际开发中遇到一个问题。一共三个表。基于一些神奇的协议,表不好放出来。但可以简单谈谈结构

表:MR_APPLICATION、MR_REPORT、MR_PACS_RESOURCE

他们都有一个共同的字段:DELETE_FLAG 逻辑删除字段。俩前者我所操作的数据,都为0,最后者为1

1是0否

我想要实现的是:无论MR_REPORT里面是否有所匹配的数据,都需要返回前二者表中数据

正确的SQL实现:

SELECT
        MA.xx,
        MPR.xxx,
        MR.xxx
        FROM MR_APPLICATION MA
                 LEFT JOIN MR_PACS_RESOURCE MPR ON MA.RESOURCE_ID = MPR.ID AND MPR.DELETE_FLAG = 0
                 LEFT JOIN MR_REPORT MR ON MA.ID = MR.APPLICATION_ID AND MR.DELETE_FLAG = 0
            AND MR.AUDIT_DOCTOR = #{xx}
        WHERE MA.ID = #{xx}
          AND MA.DELETE_FLAG = 0

错误的实现:

SELECT 
        MA.xx,
        MR.xx,
        MPR.xx
        FROM MR_APPLICATION MA
                 LEFT JOIN MR_PACS_RESOURCE MPR ON MA.RESOURCE_ID = MPR.ID AND MPR.DELETE_FLAG = 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值