新建两种表:用户表 tb_user 和订单表 tb_orderlist, 订单表中的uid字段关联用户表中的id字段


1, 直接在left join后面的on中加关联关系和过滤条件,查询结果如下图,可以看到on后面的过滤条件 u.id = 1并没有生效, uid = 2,3,4的数据都查询出来了

SELECT u.id,u.name,u.age,o.order_number,o.uid FROM tb_user u LEFT JOIN tb_orderlist o
ON u.id = o.uid AND u.id = 1

查询结果如下:

2, 我们将 on后面的过滤条件换到where后面, 过滤条件 u.id = 1是生效的, 只查询出了uid = 1的数据

SELECT u.id,u.name,u.age,o.order_number,o.uid FROM tb_user u LEFT JOIN tb_orderlist o
ON u.id = o.uid WHERE u.id = 1

查询结果如下图:

3, 我们将left join换成inner join,查询结果如下:过滤条件uid = 1是生效的

SELECT u.id,u.name,u.age,o.order_number,o.uid FROM tb_user u INNER JOIN tb_orderlist o
ON u.id = o.uid and u.id = 1

查询结果如下图:

原因分析:
left join保证了会查询左表的全部行,即用户表tb_user表中的所有行,因此我们再在on后面使用 u.id = 1对 用户表tb_user表进行条件过滤是没有作用的,但是on后面如果使用 o.uid = 5对tb_orderlist表进行条件过滤又是有效的

SELECT u.id,u.name,u.age,o.order_number,o.uid FROM tb_user u LEFT JOIN tb_orderlist o
ON u.id = o.uid and o.uid = 7

查询结果如下图:

为什么我们将过滤条件放在where后面又生效呢?
1. 在on后面加过滤条件,sql的执行步骤是先使用该条件对a表和b表先进行过滤,然后再将两张表中的记录按照关联关系生成最终结果
2. 在where后面加过滤条件,sql的执行步骤是先将a表和b表按照关联关系生成临时表,然后再将临时表按照where中的条件进行过滤得到最后结果

left join查询on后面的条件过滤失效的问题相关推荐

  1. mysql left join中on后加条件判断和where中加条件的区别

    left join中关于where和on条件的几个知识点:1.多表left join是会生成一张临时表,并返回给用户2.where条件是针对最后生成的这张临时表进行过滤,过滤掉不符合where条件的记 ...

  2. 前端利用js里数组的filter方法进行多条件过滤查询

    需求:用户在输入框输入多个条件时,可以对表格数据进行过滤查询,无需后端接口处理,利用了前端js里数组的filter方法进行过滤. 如下是效果图: 当用户在姓名的输入框里输入"张"后 ...

  3. Elasticsearch仿京东、淘宝APP客户端的商品侧边栏筛选条件过滤和分页列表查询的实现案例

    目录 需求分析 项目环境 API接口实现 需求分析 通过Elasticsearch完成商品列表查询和分类.品牌.规格参数的分组聚合统计查询 当用户输入关键字搜索后,查询出商品列表后点击右上角筛选按钮, ...

  4. mysql 查询过滤_在MySQL中,如何对查询结果进行条件过滤

    昨天和大家一起学习了在mysql中,如何分组查询统计,但是有时候也会遇到这样的一个问题,比如我在查询中,已经做了分组统计,但是我想对于这个结果进行条件过滤?应该如何处理呢? 我们一样用之前的员工表em ...

  5. 详解 Mysql LEFT JOIN和JOIN查询区别及原理

    一.Join查询原理 查询原理:MySQL内部采用了一种叫做 nested loop join(嵌套循环连接)的算法.Nested Loop Join 实际上就是通过驱动表的结果集作为循环基础数据,然 ...

  6. java实现筛选_教你用Java web实现多条件过滤功能

    生活中,当你闲暇之余浏览资讯的时候,当你搜索资料但繁杂信息夹杂时候,你就会想,如何更为准确的定位需求信息.今天就为你带来: 分页查询 需求分析:在列表页面中,显示指定条数的数据,通过翻页按钮完成首页/ ...

  7. mysql left join 查询_MySQL联表查询基本操作之left-join常见的坑

    概述 对于中小体量的项目而言,联表查询是再常见不过的操作了,尤其是在做报表的时候.然而校对数据的时候,您发现坑了吗?本篇文章就 mysql 常用联表查询复现常见的坑. 基础环境 建表语句 DROP T ...

  8. mysql+join的原理,Mysql连接join查询原理知识点

    Mysql连接join查询原理知识点 Mysql连接(join)查询 1.基本概念 将两个表的每一行,以"两两横向对接"的方式,所得到的所有行的结果. 假设: 表A有n1行,m1列 ...

  9. Flask-SQLAlchemy的安装使用 一对多 多对多join查询

    Flask-SQLAlchemy安装及设置 SQLALchemy 实际上是对数据库的抽象,让开发者不用直接和 SQL 语句打交道,而是通过 Python 对象来操作数据库,在舍弃一些性能开销的同时,换 ...

最新文章

  1. 了解你所不知道的SMON功能(一):清理临时段
  2. 优酷开放sdk-setOnerroListener
  3. 一次性解决Java程序中的乱码问题
  4. silverlight 学习笔记 (五): MVVM Light Toolkits 之 RealCommand
  5. .NET程序崩溃了怎么抓 Dump ? 我总结了三种方案
  6. [html] 如何使用纯html制作一个进度条?
  7. 社会计算:服务群体社会的大数据科学
  8. Python3+RobotFramework+pycharm
  9. 32G内存手机到底够用吗?看完泪崩
  10. 王牌战争服务器维护怎么解除,王牌战争文明重启怎么解除root权限 root权限解除方法...
  11. 利用Delphi编写Socket通信程序
  12. [导入]一个很有个性的网站??
  13. (原创)c#学习笔记10--定义类成员01--成员定义03--定义属性
  14. 浙江大学计算机科学与技术博士培养研究方向,浙江大学计算机科学技术学院博士研究生导师简介:王跃明...
  15. 华为eNSP下载阿里云盘
  16. win2003群集cluster下SQL2005和sp3补丁安装配置3
  17. java软件安装教程_r软件安装教程
  18. Q 2:真的是格局不够吗?
  19. java 读取tsv_uniVocity-parsers:一款强大的CSV/TSV/定宽文本文件解析库(Java)
  20. 群晖wordpress如何连接mysql,「全网首发」群晖wordpress二级目录下实现IP加端口访问教程...

热门文章

  1. 什么是用户画像?金融行业大数据用户画像实践
  2. vue 开发:动态设置html的title
  3. 新手入门 - 详解 frp 内网穿透 frpc.ini 配置
  4. vue2+webpack/vue3+vite 封装svg组件总结笔记
  5. 互赖-真正成熟的关系
  6. OSI七层与TCP\IP协议
  7. 快速排序时间复杂度 简明分析(平均/最坏/with high probabilty)
  8. python suds_在python3.x上安装suds 并访问webservice
  9. json过滤某些属性之@JsonIgnore
  10. 小白的OpenGL3.3自学之路(3)OpenGL3.3之如何绘制一个三角形