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

作者:Fighter168 时间:2024-01-25 06:10:30 

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

来源:https://blog.csdn.net/fighterandknight/article/details/79632252

标签:mysql,left,join,连接,重复
0
投稿

猜你喜欢

  • 如何为Access数据库表添加日期或时间戳

    2008-11-21 12:46:00
  • Pycharm使用爬虫时遇到etree红线问题及解决

    2021-09-04 19:07:06
  • python 递归遍历文件夹,并打印满足条件的文件路径实例

    2023-08-07 07:22:48
  • Python request post上传文件常见要点

    2022-11-05 09:27:14
  • Pandas统计重复的列里面的值方法

    2022-03-06 20:20:57
  • php解析xml提示Invalid byte 1 of 1-byte UTF-8 sequence错误的处理方法

    2023-09-09 18:55:22
  • python中.format()方法使用详解

    2021-07-19 03:38:07
  • python 爬虫基本使用——统计杭电oj题目正确率并排序

    2021-11-25 17:16:35
  • Python实现用户登录并且输入错误三次后锁定该用户

    2022-07-28 12:02:47
  • js 采用delete实现继承示例代码

    2023-07-17 09:06:52
  • tensorflow之并行读入数据详解

    2021-09-20 14:42:30
  • AJAX无刷新验证用户名是否存在

    2007-08-10 10:07:00
  • Python实现问题回答小游戏

    2023-05-13 13:26:19
  • Python元组拆包和具名元组解析实例详解

    2021-10-17 05:26:58
  • python进程管理工具supervisor使用实例

    2022-08-24 13:47:03
  • Python打包成exe文件的详细操作指南

    2023-01-18 06:35:33
  • Python如何发送与接收大型数组

    2022-07-26 06:54:54
  • ecshop百度编辑器远程下载无后缀的图片,并且加水印

    2023-08-14 17:31:41
  • python对验证码降噪的实现示例代码

    2021-01-02 09:54:17
  • Python中扩展包的安装方法详解

    2021-09-19 23:35:46
  • asp之家 网络编程 m.aspxhome.com