开发者

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

开发者 https://www.devze.com 2023-03-24 09:04 出处:网络 作者: Fighter168
目录mysql使用left join连接出现重复问题描述问题示例问题解决mysql使用left join时,右表数据有重复数据总结mysql使用left join连接出现重复
目录
  • 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=prodeITFQuct.userid;

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

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

      问题解决

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

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

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

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

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

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

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

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

      总结

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

      0

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      关注公众号