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

发布时间:2023-05-11 16:27:15 作者:iii
来源:亿速云 阅读:257

这篇文章主要介绍了mysql使用left join连接出现重复问题怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇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;

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

执行结果竟然比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使用left join连接出现重复问题怎么解决”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“mysql使用left join连接出现重复问题怎么解决”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。

推荐阅读:
  1. MySQL数据库的监控方式是什么
  2. nchar在mysql中指的是什么

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mysql left join

上一篇:stream中怎么正确使用peek

下一篇:Go语言单例模式怎么实现

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》