当前位置: 首页 > article >正文

【联表查询中的隐蔽 bug】

join、left join

  • JOIN(INNER JOIN)是选择两个表中都有的记录,结果集会排除掉任何不匹配的记录。
  • LEFT JOIN是选择左表的所有记录,右表的记录如果存在则包括在内,不存在则用NULL填充。

举例

前提介绍

  • 下面的sq大致看上去好像没问题。
  • 有三张表 (users用户表、orders订单表、order_user用户和订单的关联表表示参加这个订单的用户) 。
  • 很明显,这个sql对应的需求应该是查询所有订单,并且联表查询出参加这个订单的用户,也就是及时这个订单没有用户参与也要将这条订单查出。
  • 但是,现在情况是当order_user没有记录与orders对应时,这条订单不能被查出。
select orders.id             AS order_id,
      // ... 省略一些字段
       orders.description    AS order_description,
       
       users.id              AS user_id,
        // ... 省略一些字段
       users.description     AS user_description
from orders
         join order_user on orders.id = order_user.order_id
         left join users on users.id = order_user.user_id
where orders.is_delete = 0
and order_user.is_delete = 0
and users.is_delete = 0;

问题分析

上面的sql问题出在where后面的条件上,虽然left join不会管右边有没有用户相匹配,但是,where后面的isdelete=0会过滤掉右边为空的记录。

解决办法

将isdelete判断变成联表查询的并列条件。

select orders.id             AS order_id,
      // ... 省略一些字段
       orders.description    AS order_description,
       
       users.id              AS user_id,
        // ... 省略一些字段
       users.description     AS user_description
from orders
         left join order_user on orders.id = order_user.order_id and order_user.is_delete = 0
         left join users on users.id = order_user.user_id and users.is_delete = 0
where orders.is_delete = 0;


http://www.kler.cn/a/412185.html

相关文章:

  • Spring Boot英语知识网站:用户体验设计
  • vue3(十七)-基础入门之vue-nuxt路由
  • 【漏洞复现】CVE-2020-13925
  • 预告|ROS中超好用固定翼仿真开源平台即将上线!
  • k8s rainbond centos7/win10 -20241124
  • vue实现列表滑动下拉加载数据
  • 网易博客旧文-----安卓界面代码例子研究(一)
  • UE5材质Texture Sample 节点的基本概念
  • 数据结构 ——— 快速排序的时间复杂度以及规避最坏情况的方法
  • SlickGrid复选框
  • 前端-Git
  • Linux高阶——1123—服务器基础服务器设备服务器基础能力
  • 多商户系统推动旅游业数字化升级与创新,定制化旅游促进市场多元化发展
  • Jackson库中JsonInclude的使用
  • 使用 Vue.js 创建一个简单的待办事项应用
  • QT QVerticalSpacer控件 全面详解
  • 16 —— Webpack多页面打包
  • 企业OA管理系统:Spring Boot技术深度解析
  • 自研芯片逾十年,亚马逊云科技Graviton系列芯片全面成熟
  • 景联文科技:高质量数据采集标注服务引领AI革新
  • Spring Boot Web应用开发:数据访问
  • 短信发送业务
  • 0基础学前端系列 -- 深入理解 HTML 布局
  • DB-GPT V0.6.2 版本更新:牵手libro社区、GraphRAG图谱构建能力增强等
  • 基于springboot停车场管理系统源码和论文
  • k8s删除网络组件错误