left join查询on后面的条件过滤失效的问题
新建两种表:用户表 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后面的条件过滤失效的问题相关推荐
- mysql left join中on后加条件判断和where中加条件的区别
left join中关于where和on条件的几个知识点:1.多表left join是会生成一张临时表,并返回给用户2.where条件是针对最后生成的这张临时表进行过滤,过滤掉不符合where条件的记 ...
- 前端利用js里数组的filter方法进行多条件过滤查询
需求:用户在输入框输入多个条件时,可以对表格数据进行过滤查询,无需后端接口处理,利用了前端js里数组的filter方法进行过滤. 如下是效果图: 当用户在姓名的输入框里输入"张"后 ...
- Elasticsearch仿京东、淘宝APP客户端的商品侧边栏筛选条件过滤和分页列表查询的实现案例
目录 需求分析 项目环境 API接口实现 需求分析 通过Elasticsearch完成商品列表查询和分类.品牌.规格参数的分组聚合统计查询 当用户输入关键字搜索后,查询出商品列表后点击右上角筛选按钮, ...
- mysql 查询过滤_在MySQL中,如何对查询结果进行条件过滤
昨天和大家一起学习了在mysql中,如何分组查询统计,但是有时候也会遇到这样的一个问题,比如我在查询中,已经做了分组统计,但是我想对于这个结果进行条件过滤?应该如何处理呢? 我们一样用之前的员工表em ...
- 详解 Mysql LEFT JOIN和JOIN查询区别及原理
一.Join查询原理 查询原理:MySQL内部采用了一种叫做 nested loop join(嵌套循环连接)的算法.Nested Loop Join 实际上就是通过驱动表的结果集作为循环基础数据,然 ...
- java实现筛选_教你用Java web实现多条件过滤功能
生活中,当你闲暇之余浏览资讯的时候,当你搜索资料但繁杂信息夹杂时候,你就会想,如何更为准确的定位需求信息.今天就为你带来: 分页查询 需求分析:在列表页面中,显示指定条数的数据,通过翻页按钮完成首页/ ...
- mysql left join 查询_MySQL联表查询基本操作之left-join常见的坑
概述 对于中小体量的项目而言,联表查询是再常见不过的操作了,尤其是在做报表的时候.然而校对数据的时候,您发现坑了吗?本篇文章就 mysql 常用联表查询复现常见的坑. 基础环境 建表语句 DROP T ...
- mysql+join的原理,Mysql连接join查询原理知识点
Mysql连接join查询原理知识点 Mysql连接(join)查询 1.基本概念 将两个表的每一行,以"两两横向对接"的方式,所得到的所有行的结果. 假设: 表A有n1行,m1列 ...
- Flask-SQLAlchemy的安装使用 一对多 多对多join查询
Flask-SQLAlchemy安装及设置 SQLALchemy 实际上是对数据库的抽象,让开发者不用直接和 SQL 语句打交道,而是通过 Python 对象来操作数据库,在舍弃一些性能开销的同时,换 ...
最新文章
- 了解你所不知道的SMON功能(一):清理临时段
- 优酷开放sdk-setOnerroListener
- 一次性解决Java程序中的乱码问题
- silverlight 学习笔记 (五): MVVM Light Toolkits 之 RealCommand
- .NET程序崩溃了怎么抓 Dump ? 我总结了三种方案
- [html] 如何使用纯html制作一个进度条?
- 社会计算:服务群体社会的大数据科学
- Python3+RobotFramework+pycharm
- 32G内存手机到底够用吗?看完泪崩
- 王牌战争服务器维护怎么解除,王牌战争文明重启怎么解除root权限 root权限解除方法...
- 利用Delphi编写Socket通信程序
- [导入]一个很有个性的网站??
- (原创)c#学习笔记10--定义类成员01--成员定义03--定义属性
- 浙江大学计算机科学与技术博士培养研究方向,浙江大学计算机科学技术学院博士研究生导师简介:王跃明...
- 华为eNSP下载阿里云盘
- win2003群集cluster下SQL2005和sp3补丁安装配置3
- java软件安装教程_r软件安装教程
- Q 2:真的是格局不够吗?
- java 读取tsv_uniVocity-parsers:一款强大的CSV/TSV/定宽文本文件解析库(Java)
- 群晖wordpress如何连接mysql,「全网首发」群晖wordpress二级目录下实现IP加端口访问教程...
热门文章
- 什么是用户画像?金融行业大数据用户画像实践
- vue 开发:动态设置html的title
- 新手入门 - 详解 frp 内网穿透 frpc.ini 配置
- vue2+webpack/vue3+vite 封装svg组件总结笔记
- 互赖-真正成熟的关系
- OSI七层与TCP\IP协议
- 快速排序时间复杂度 简明分析(平均/最坏/with high probabilty)
- python suds_在python3.x上安装suds 并访问webservice
- json过滤某些属性之@JsonIgnore
- 小白的OpenGL3.3自学之路(3)OpenGL3.3之如何绘制一个三角形