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 a
left join table2 b on b.X=a.X
where XXX
)tmp

很明显,子查询语句无论 left join、inner join都没啥区别了

2、查询条件放在on后面

select a.*,b.*
from table1 a
left join table2 b on b.X=a.X and XXX

注意:where XXX去掉,改为链接条件on后面的 and XXX

分析:

on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

结论:


过滤条件放在:

where后面:是先连接然生成临时查询结果,然后再筛选

on后面:先根据条件过滤筛选,再连 生成临时查询结果

left join后面加上where条件浅析的更多相关文章

  1. left join加上where条件的困惑

    eft join的困惑:一旦加上where条件,则显示的结果等于inner join将where 换成 and 用where 是先连接然后再筛选   用and 是先筛选再连接 数据库在通过连接两张或多 ...

  2. 数据库左连接left join、右连接right join、内连接inner join on 及 where条件查询的区别

    join on 与 where 条件的执行先后顺序: join on 条件先执行,where条件后执行:join on的条件在连接表时过滤,而where则是在生成中间表后对临时表过滤 left joi ...

  3. SQL中 LEFT JOIN ,RIGHTJOIN,INNER JOIN 的使用及优先级浅析

    首先了解JOIN的基本概念: join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据. INNER JOIN:在表中存在至少一个匹配时,INNER JOIN 关键字返回行. LEFT JO ...

  4. join语句中on条件与where条件的区别

    大纲:on是在生成连接表的起作用,where是生成连接表之后对连接表再进行过滤 当使用left join时,无论on的条件是否满足,都会返回左表的所有记录,对于满足的条件的记录,两个表对应的记录会连接 ...

  5. SQL中join连接查询时条件放在on后与where后的区别

    数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户. 在使用left jion时,on和where条件的区别如下: 1. on条件是在生成临时表时使用的条 ...

  6. left join on 和where条件的放置

    先看个例子 以下P1与S1是一对多的关系 结果分别是:1746,1748,1748,1277525,307 由此看出: P1 left join S1 on ... and ...是将S1表中数据先过 ...

  7. mysql中left join中的on条件 和 where条件区别

    需要知道sql中关键字的执行顺序. FROM-> ON->JOIN-> WHERE->GROUP BY-> HAVING->SELECT-> DISTINCT ...

  8. left join 如何增加where条件(在on的后面),这很重要

    SELECT [学号], [姓名],[备注2],[年级],专业,[学院],[x30] FROM [总表] left join k指标体系  on  学号 = x01 where 年级='2014'

  9. MySQL JOIN 连接时,条件为以逗号分隔的字段与 ID 相匹配

    一.背景 有一张相片表,一张相片所属标签表,一张相片可以归属于多个标签,表结构如下: 现在需要通过一次查询,得到每一张照片对应的标签名称,标签名称之间以固定的分隔符连接,结果如下图: 二.查询语句 原 ...

随机推荐

  1. epoll中坑人的地方再次学习

    https://blog.csdn.net/linuxheik/article/details/73294658

  2. LoadScene场景异步加载

    LoadScene场景异步加载 using UnityEngine; using System.Collections; using UnityEngine.SceneManagement; usin ...

  3. 修改linux文件权限命令

    修改linux文件权限命令:chmod Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作. 文件或目录的访问权限分为只读,只写和可执行三种.以文 ...

  4. telnet不能用,提示:-bash: telnet: command not found

    1.[root@localhost ~]# telnet  bash: telnet: command not found 2. 查询了是否安装Telnet包,结果如下: [root@localhos ...

  5. GitKraken使用教程-基础部分(3)

    5. 克隆服务器上的项目 首先,返回主界面,点击File => Clone Repo,选择 Clone with URL,如下图: 图 5‑1 SSH方式克隆仓库界面 1) SSH 方式连接仓库 ...

  6. 前端性能优化-Cookie

    什么是Cookie Cookie可以理解成为浏览器内部存储数据的一个数据库,并会随请求一起被发送:Cookie以键-值对的形式存在.可以存储网站的一些数据,这部分数据不会随着浏览器关闭而被清除.如下图 ...

  7. EntityFramework报错

    解决:未能加载文件或程序集“EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089” 使用 ...

  8. SSL、数字签名、CA 工作原理

    SSL.数字签名.CA 工作原理 对称加密和非对称加密介绍和区别 什么是对称加密技术?   对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥,即加密密钥也可以用作解密密钥,这种方 ...

  9. 如何修改eclipse的web项目默认浏览器

  10. Mincost

    The cost of taking a taxi in Hangzhou is not a constant for each kilometer you travel: the first 4 k ...