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

关于MySQL多表关联时过滤条件的位置

简单的一个Demo说明下问题

表A和表B关联查询,以project_id=4为过滤条件,查询结果返回表A中的ID,name,表B中的project_id,如果表B中没有和表A匹配的记录则a.project_id返回null,于是第一次我就写出了这样的SQL

SELECT t.id,t.name,a.project_id FROM micrisevice AS t LEFT JOIN project_mirservie AS a ON a.micrservice_id = t.id WHERE t.STATUS = 0 AND a.project_id = 4 OR a.id is NULL

问题直接出现了,left join 应该无论如何要返回左表(这里指表A)的所有记录,但是结果却不是这样的,如下

结果为ID 为2的那条数据不见了,怎么回事,一开始我以为是AND 和 OR中的条件没有加括号导致的,加了括号之后还是一样的结果,于是我就把t.STATUS=0 后面的条件删除,看看这次执行的结果是什么样的,如图

可以看到这里是left join之后的结果,看到这我明白了,刚才的条件是作用在这张临时表上了,所以导致查询条件where a.project_id= 4直接把project_id为3,5,3的过滤掉了,这和我一开始的期望是不符合的,所以应该是把条件放到 left join里去,这样才会得到我想要的临时表,如下

SELECT t.id, t.NAME, a.project_id FROM micrisevice AS t LEFT JOIN project_mirservie AS a ON a.micrservice_id = t.id AND a.project_id = 4 OR a.id IS NULL WHERE t.STATUS = 0

这样再用where条件对临时表过滤才是期望的结果

http://www.jsqmd.com/news/1282169/

相关文章:

  • python 类中的递归函数使用
  • Hibernate一对多关系
  • 斐波那契数列的实现
  • Jetson Nano视觉数据增强实战:平衡效果与计算开销的边缘优化方案
  • 2026重庆合川管道疏通避坑指南 邻里帮师傅真实测评 - 余生黄金回收
  • 深圳夏令营:军博营地典范 - 17728098551
  • 最后窗口期!2024Q3前未掌握AI办公链路的职场人,将错过晋升关键分水岭
  • 高效管理PS1游戏存档:MemcardRex完整使用指南
  • Godot着色器基础
  • 【单片机毕业设计推荐】 基于 51/STM32 单片机的智能感应台灯控制系统设计与实现,基于 51/STM32 单片机的蓝牙可控人体感应调光台灯设计(011904)
  • matplotlib入门 ----plot()函数
  • 传统图像处理算法总结
  • 【干货】前端进阶应该知道的这些调试方法
  • 3天学完linux基础-----第二天
  • NBM7100A与PIC18F56K42实现超低功耗物联网设备设计
  • 简单总结面向对象
  • 【自然语言处理】
  • 大模型应用的安全红线:从Prompt注入到数据泄露的防护清单
  • Web测试经验分享
  • java学习(87):Interage包装类进制转换
  • 《php面向对象》第28课:封装复杂的MVC-配置文件
  • Beyond Compare 5 激活指南:3分钟快速免费激活终极教程
  • 博客分类和博客专栏整合在一起了
  • PHP:数组函数(1)
  • java线程的状态、线程池、Lambda表达式
  • 首饰回收红榜测评 杭州钱塘区 2026 上门收珠宝靠谱门店梳理 - 每日生活报
  • 边缘推理芯片横向对比报告:从 Kendryte K230 到 Rockchip RV1126 的 AI 算力实测分析
  • 洛谷P1002 过河卒------Python代码实现
  • 经典CNN和GAN论文代码总结(未完待续... ...)
  • 武汉没考上高中上什么学校?武汉科创职业技术学校 2026 招生简章 - 武汉中职最新信息发布