left join on 后面 and 用法
发布日期:2022-09-10 02:29:03 浏览次数:4 分类:博客文章

本文共 892 字,大约阅读时间需要 2 分钟。

今天查数据,使用 left join , 想着提前过滤下数据性能会好, on 后面多加了几个 and 条件, 发现数据并不是预想的结果,遂搜索一番,发现之前对 on 后面的条件一直有一个大的误区。

MYSQL 版本: 5.7.22

T1 表                  T2 表

               

 

SQL 1: 

select * from T1 t1 left join T2 t2 on t1.id = t2.id and t2.EnName = 'Mark';

结果为:

 

 

 

SQL 2:

select * from T1 t1 left join T2 t2 on t1.id = t2.id and t1.name = '张三';

结果为:

 

 

 

结论: 当使用 left join(或 right join) 的时候, 主表的数据并不会因为 on 后面的过滤条件而有所改变, on 后面的过滤条件只会影响 关联从表的数据。

 如果想对表结果数据产生影响, 使用 inner join 或者  在最后使用  where 进行过滤。

 - inner join

-- sql1select * from T1 t1 inner join T2 t2 on t1.id = t2.id and t1.name = '张三';-- sql2select * from T1 t1 inner join T2 t2 on t1.id = t2.id and t2.EnName = 'Mark';

sql1 :                                 sql2:

            

 

 

- where

select * from T1 t1 left join T2 t2 on t1.id = t2.id where t1.name = '张三';

 

left join(right join) 是在 on 过滤后 join , 然后进行追加, 相对来说 on 提前过滤数据, 减少了笛卡尔积 的数据量,但是之前不知道 过滤后还要进行追加,后面使用时 需注意这点。

 

转载地址:https://www.cnblogs.com/cgsdg/p/16426658.html 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:left join 和 group by 一起使用
下一篇:left , right , inner , 区别

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月10日 22时11分55秒