mysql使用left join连接出现重复问题的记录

 更新时间:2023年03月23日 09:07:53   作者:Fighter168  
这篇文章主要介绍了mysql使用left join连接出现重复问题的记录,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

mysql使用left join连接出现重复

问题描述

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

问题示例

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

ID name userid
1 aaaa 10001
2 bbbb 10002
3 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;

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

问题解决

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

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

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 
后面脑补

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MySQL自动为查询数据结果加序号

    MySQL自动为查询数据结果加序号

    这篇文章主要给大家介绍了关于MYSQL如何自动为查询数据的结果编上序号的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用mysql具有一定的参考学习价值,需要的朋友们下面随着小编来一起看看吧
    2022-12-12
  • 详解MySQL中varchar和int隐式转换的注意事项

    详解MySQL中varchar和int隐式转换的注意事项

    这篇文章主要为大家详细介绍了MySQL中varchar和int隐式转换的注意事项,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • MySQL 大表添加一列的实现

    MySQL 大表添加一列的实现

    这篇文章主要介绍了MySQL 大表添加一列的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • 详细解读MySQL中的权限

    详细解读MySQL中的权限

    这篇文章主要介绍了MySQL中的权限,包括各个权限所能操作的事务以及操作权限的一些常用命令语句,需要的朋友可以参考下
    2015-05-05
  • mysql 实现设置多个主键的操作

    mysql 实现设置多个主键的操作

    这篇文章主要介绍了mysql 实现设置多个主键的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • win2008 R2 WEB环境配置之MYSQL 5.6.22安装版安装配置方法

    win2008 R2 WEB环境配置之MYSQL 5.6.22安装版安装配置方法

    这篇文章主要介绍了win2008 R2 WEB环境配置之MYSQL 5.6.22安装版安装配置方法,需要的朋友可以参考下
    2016-06-06
  • 深入理解MySQL中MVCC与BufferPool缓存机制

    深入理解MySQL中MVCC与BufferPool缓存机制

    这篇文章主要介绍了深入理解MySQL中MVCC与BufferPool缓存机制,MySQL默认RR隔离级别就是通过该机制来保证的MVCC,更多主题相关内容,需要的可以参考下面文章内容介绍
    2022-05-05
  • MySQL数据库线上修改表结构的方法

    MySQL数据库线上修改表结构的方法

    MySQL有一个把锁,叫做MDL元数据锁,当对表修改的时候,会自动给表加上这把锁,也就是不需要自己显式使用,这篇文章主要介绍了MySQL数据库线上修改表结构的方法,需要的朋友可以参考下
    2022-09-09
  • Mysql中分布式锁的具体实现

    Mysql中分布式锁的具体实现

    分布式锁开发中经常使用,本文主要介绍了Mysql中分布式锁的具体实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-01-01
  • MySql安装及登录详解

    MySql安装及登录详解

    这篇文章主要介绍了MySql安装及登录详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-03-03

最新评论