0

0

mysql使用left join连接出现重复问题怎么解决

王林

王林

发布时间:2023-06-02 13:13:41

|

3708人浏览过

|

来源于亿速云

转载

    mysql使用left join连接出现重复

    问题描述

    在使用连接查询的时候,例如以a表为主表,左连接b表,我们期望的是a表有多少条记录,查询结果就有多少条记录,但是可能会出现这样的结果,就是查询出来的记录总条数,多余a表的记录总条数,并且是查询的结果显示出来时有部分列是重复的,简单的说,就是产生了笛卡尔积。

    问题示例

    其中A表是用户表(user),字段分别是:

    ID name userid1 aaaa 100012 bbbb 100023 ccccc 10003

    B表是第一类产品表(product),字段分别是:

    ID title time userid
    1 标题1 2014-01-01 10002
    2 标题2 2014-01-01 10002
    3 标题3 2014-01-01 10001
    4 标题4 2018-03-20 10002
    5 标题5 2018-03-20 10003

    这个时候我们使用下面sql 执行的时候发现

    selecct * from user left join product on user.userid=product.userid;

    mysql使用left join连接出现重复问题怎么解决

    执行结果竟然比user表的总数记录多

    问题解决

    其实这个问题明眼人一眼就看出来了,因为left join的关键字在product表不唯一,所以这部分不唯一的数据就产生了笛卡尔积,导致执行结果多于预期结果。

    Lessie AI
    Lessie AI

    一款定位为「People Search AI Agent」的AI搜索智能体

    下载

    解决的办法就是采用唯一键去关联做链接查询就可以了

    mysql使用left join时,右表数据有重复数据

    LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。 此时右表 (table_name2)右表有通过 on 关键字过滤后没有数据或只有一条数据时是没有问题的。

    我要说的是如果右表 (table_name2)出现重复数据(业务上完全重复)该怎么处理。

    当右表 (table_name2)通过 on 关键字过滤后出现重复数据,此时查出的数据就会是,右表数据*重复的数据+右表其他条件数据,和我们所需数据的条数不同。

    我的解决方法是,先根据过滤字段分组查询一次右表 (table_name2),把相同的数据过滤掉,然后把这个结果当成右表在进行关联

    前面脑补 
    LEFT JOIN (SELECT MODEL_CODE,MODEL_NAME from tm_model GROUP BY MODEL_CODE) tm on tav.model_code = tm.MODEL_CODE 
    后面脑补

    相关专题

    更多
    Java JVM 原理与性能调优实战
    Java JVM 原理与性能调优实战

    本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

    0

    2026.01.20

    PS使用蒙版相关教程
    PS使用蒙版相关教程

    本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

    53

    2026.01.19

    java用途介绍
    java用途介绍

    本专题整合了java用途功能相关介绍,阅读专题下面的文章了解更多详细内容。

    57

    2026.01.19

    java输出数组相关教程
    java输出数组相关教程

    本专题整合了java输出数组相关教程,阅读专题下面的文章了解更多详细内容。

    35

    2026.01.19

    java接口相关教程
    java接口相关教程

    本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

    9

    2026.01.19

    xml格式相关教程
    xml格式相关教程

    本专题整合了xml格式相关教程汇总,阅读专题下面的文章了解更多详细内容。

    10

    2026.01.19

    PHP WebSocket 实时通信开发
    PHP WebSocket 实时通信开发

    本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

    15

    2026.01.19

    微信聊天记录删除恢复导出教程汇总
    微信聊天记录删除恢复导出教程汇总

    本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

    130

    2026.01.18

    高德地图升级方法汇总
    高德地图升级方法汇总

    本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

    138

    2026.01.16

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    MySQL 教程
    MySQL 教程

    共48课时 | 1.8万人学习

    MySQL 初学入门(mosh老师)
    MySQL 初学入门(mosh老师)

    共3课时 | 0.3万人学习

    简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信

    共1课时 | 801人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号