我是靠谱客的博主 风趣香烟,最近开发中收集的这篇文章主要介绍sql 中的left join 的坑请大家绕着走,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

背景:
最近工作中一直和sql 打交道,由于平时用的少,也不怎么写多表联查的情况,但是最近项目中存在大量的多表联查的sql,让自己走了一些小坑

  1. A left join B 中未必A就是小表,或者说A未必是1:N中的 N

A表

namecode
张三001

B表

corecode
23001
234001

select * from a left join B on a.code = b.code
结果 不是一条数据而是2条数据

这个比较好理解,自己当时思维定势导致的 主观认为, 都是小表 left join 大表,

  1. on 和 where 写条件区别

条件on 和 where 后面写条件有区别吗? 原来只记得 条件尽可能早写,减少数据的过滤
所以经常经条件提前写在on里面 这种未必符合实际条件

A表

namecodeyn
张三0011
李四0021

B表

corecodeyn
230011
240010
250021
270020

sql1

select * from b left join a on a.code = b.code 
where a.yn = 1 and b.yn = 1

sql2

select * from b left join a on a.code = b.code and b.yn = 1
where a.yn = 1 

这2个sql执行的结果是不一样的,自己去验证,这里我说下理论:
on比where起作用更早,,先根据on条件进行多表的连接操作,生成一个临时表再通过where来筛选

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

最后

以上就是风趣香烟为你收集整理的sql 中的left join 的坑请大家绕着走的全部内容,希望文章能够帮你解决sql 中的left join 的坑请大家绕着走所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部