左连接的左边为什么不全显示
left join后面加上where条件浅析
select a.*,b.*
from table1 a
left join table2 b on b.X=a.X
where XXX
如上:一旦使用了left join,没有where条件时,左表table1会显示全部内容
使用了where,只有满足where条件的记录才会显示(左表显示部分或者全部不显示)
so。。。。
left join的困惑:一旦加上where条件,则显示的结果等于inner join
原因分析:
数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户;
where条件是在临时表生成好后,再对临时表进行过滤的条件;
因此:where 条件加上,已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
解决方案:
1、where过滤结果作为子查询,和主表left,如下:
select a.*,tmp.*
from table1 a
left join(select a.*,b.*from table1 aleft join table2 b on b.X=a.Xwhere XXX
)tmp
很明显,子查询语句无论 left join、inner join都没啥区别了
2、查询条件放在on后面
1 2 3 |
|
注意:where XXX去掉,改为链接条件on后面的 and XXX
分析:
on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
结论 a表和b表 做关联
1. on a.id=b.id and a.name='张三' 这种在on后边直接and 的对a表无效 只要不加where 左边永远都是全显示
2.on a.id=b.id where a.name='张三' 这种则查出只有是张三的数据
左连接的左边为什么不全显示相关推荐
- 连接查询 左连接 右连接 内连接 1112 sqlserver
1112连接查询 内联连 关键词 inner join-on inner join...on 格式 表1 inner join 表2 on 表1.列 = 表2.列 表1 inner join 表2 o ...
- SQL 查询笔记:子查询,分组查询,左连接查询。。。。。
表结构: CREATE TABLE dept ( id int NOT NULL, dname varchar ( 50 ) DEFAULT NULL, loc varchar ( 50 ) DEFA ...
- mysql内连接和外连接的区别_数据库左连接、右连接、内连接、全连接区别
基本定义: left join (左连接):返回包括左表中的所有记录和右表中连接字段相等的记录. right join (右连接):返回包括右表中的所有记录和左表中连接字段相等的记录. inner j ...
- 数据库中查询的各种连接(左连接,右连接,全连接,内连接,交叉连接,自连接)...
转:http://www.cnblogs.com/Caiqinghua/archive/2013/05/15/3079397.html 左右连接其实就是以哪个表为主(或者说为准),结果集为" ...
- sql的左连接,右连接,内连接
环境: SQL工具(如Navicat,SQLyog) MySQL驱动 全局总结: 左连接:关注左边,右边没有就为空. 右连接:关注右边,左边没有就为空. 内连接:返回交集 必备: 两张或多张表格 一, ...
- sql查询:单表、多表、左连接、外连接、高级查询
sql查询 一.sql语句 标准SQL包含了4种基本的语句类别: (1)DDL语句,数据定义语句,主要用来定义数据库,表名,字段,例如create,drop,alter. (2)DML语句,数据操作语 ...
- SQL中的各种连接的区别总结(内连接,左连接,左外连接,右连接,右外连接,全连接,全外连接)
在数据库中建立两张表方便大家理解,teacher和student表(student表中的teacherid字段是对应teacher表中的ID,举个例子张三的老师就是李四,没有teacherid就是这个 ...
- SQL中的左连接与右连接,内连接有什么区别
例子,相信你一看就明白,不需要多说 A表(a1,b1,c1) B表(a2,b2) 左连接: select A.*,B.* from A left outer join B on(A.a1=B.a2) ...
- 左右链接php,sql的左连接和右连接有什么区别
sql的左连接和右连接区别:1.左连接只要左边表中有记录,数据就能检索出来,而右连接是只要右边表中有记录:2.左连接是已左边表中的数据为基准,而右联接是左向外联接的反向联接. 本文操作环境:Windo ...
最新文章
- java 报文长度计算_从TcpClient.GetStream()读取而不知道长度 - java
- 一篇非常好的transformer年度总结
- 中国人工智能学会通讯——智能语音技术与产业应用展望 1.2 智能语音产业应用的现状和挑战...
- Centos 6.5 监控路由器、思科交换机Nagios (三)
- RealPlayer 15正式发布 简体中文版下载
- python全套视频教程下载-老男孩python全套视频教程百度云资源下载
- 铭感文件目录_waf绕过
- Node.js 路由的简单使用
- .NET 5.0 RC1 发布,离正式版发布仅剩两个版本,与 netty 相比更具竞争力
- Spring Boot的自动配置的原理
- mysql中的sql
- UltraEdit 21 for Mac(超好用的高级文本编辑器)
- cmpp java代码_CMPP2.0 java实现基于 协议。 多个厂家的版本都有体现。 Develop 238万源代码下载- www.pudn.com...
- 学习笔记:FW内容安全概述
- 各邮箱的邮件接收服务器和发送服务器
- POJ 2503 Babelfish(map)
- 字节跳动年薪百万的测试开发=“半个产品+半个开发”?
- [网鼎杯 2020 青龙组]虚幻2 详解 (python脚本)
- EBAZ4205 ZYNQ HDMI扩展板 显示Linux桌面播放视频
- 当使用VMware给虚拟机扩展硬盘容量时,显示无法扩展容量并提示:在部分链上无法执行所调用的函数,请打开父虚拟磁盘。