mysql为什么我的left join之后比查单表数据行更多?
【1】问题情况
结果1:812815 结果2:812864
为什么?不是 left join 怎么都会是左表的全集吗?怎么还能比全表多出来不少?
【2】解析
(2.1)当辅助表比 left join 主表匹配行多时
很明显,这个问题是因为 on 中的条件 tv.ticket 与 tvr.ticket 并不是一一对应且唯一,辅助表 tvr.ticket 必定是有重复值多行存在。
tv.ticket 1 对 tvr.ticket 多,甚至是多对多,所以左表会多出行来,不然匹配上的难道你哪一行不要吗?
不信?举个例子看看,如下图:
我们可以看到,t1表是 left join 左表,那么它只有 1 2 3 ,3行,但在匹配过程中 t2 表有值 3个1
3个1都匹配上了左表的,按照匹配上的笛卡尔积,每一次匹配都会对应生成一行,也就是生成 1*3 行
最终结果当然是3个1。
要是再来一个,左表 t1 是2个1,右表 t2 还是3个1,那么就会配置后值笛卡尔积道理生成 2*3 的6行数据
(2.2)当辅助表比 left join 主表匹配行少时
我们改成 right join ,那么 t2为主表,如下图,我们发现情况还是一样的。
【3】结论
1、left join 时,只有当主表与辅助表的关联条件所在字段没有重复值时,即均为 1对1 或 1对0,那么显示的才是主表全表内容。
2、无论是 left join 还是 right join ,在关联条件所在值是 1 对 多、多对多时,那么针对匹配的该值,都是 1*N 或 N*N ;具体见(2.1)案例
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2021-09-01 kafka运维命令大全
2020-09-01 【等待优化】如何定位网络性能问题 ASYNC_NETWORK_IO 等待
2020-09-01 (4.48)sql server添加列并使用默认值填充已有记录
2020-09-01 【sql server安全】sql server列加密查询性能问题及解决方案
2020-09-01 【sql server安全】sql server使用混合密钥实现列加密
2020-09-01 【sql server安全】sql server使用非对称秘钥实现列加密
2020-09-01 【sql server安全】sql server使用对称秘钥实现列加密