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;
执行结果竟然比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


猜你喜欢
- 本文实例讲述了python使用正则表达式提取网页URL的方法。分享给大家供大家参考。具体实现方法如下:import reimport url
- Update Tb_Garden1 G Set Steward = (Select Id From Zyq.Tb_User U Where
- IE8主页http://www.microsoft.com/windows/products/winfamily/ie/ie8/defaul
- MySQL有多种存储引擎,MyISAM和InnoDB是其中常用的两种。这里介绍关于这两种引擎的一些基本概念(非深入介绍)。MyISAM是My
- 这里发现可以采用三种的变通方法将置为disabled的元素状态改为enabled。 第一种:改变disabled的boolean状态,具体代
- 树状图树状图是显示对象、组或变量之间的层次关系的图表。树状图由在节点或簇处连接的分支组成,它们代表具有相似特征的观察组。分支的高度或节点之间
- 计算信息熵的公式:n是类别数,p(xi)是第i类的概率假设数据集有m行,即m个样本,每一行最后一列为该样本的标签,计算数据集信息熵的代码如下
- 前言:在进行数据分析时,难免需要对数据集应用一些我们自定义的一些函数,或者其他库的函数,得到我们想要的数据,这种情况下,可能大家第一时间想到
- 1:开启binlog日志记录 修改mysql配置文件mysql.ini,在[mysqld]节点下添加 # log-bin log-bin =
- 前言本文使用 cpu 版本的 tensorflow 2.4 ,选用 Keras Tuner 工具以 Fashion 数据集的分类任务为例,完
- 1、什么是mixin这不是Vue的专属的,可以说是一种思想,在很多开发框架中都实现了Mixin。官方解释:mixin提供了一种非常灵活的方式
- (注:在看到大家如此关注JS里头的这几个对象,我试着把原文再修改一下,力求能再详细的阐明个中意义 2007-05-21)在提到上述的概念之前
- 为了方便例子讲解,现有数组和json对象如下var demoArr = ['Javascript', 'Gulp
- 概述函数是基本的代码块,用于执行一个任务语法函数定义func 函数名称( 参数列表] ) (返回值列表]){ 执行语句}一.函数
- 1. 数据筛选 a b c0 0 2 41 6 8 102 12 14 163 18 20 224 24 26 285 30 32 346
- Apple4.us的张亮问我:“很多人说用户体验是苹果的核心竞争力。在用户体验方面,我究竟该从苹果的设计中学习什么” ?关于这个问题的答案我
- 概述可以获取的数据包括:video-视频模块user-用户模块dynamic-动态模块这次用“Running Man”十周年特辑的视频,来做
- 每个浏览器都有自己的默认样式,这是一段预定义的CSS,用以简单地呈现网页。在Firefox中的地址栏中输入resource://gre/re
- 在我们的web应用中,虽然PHP、JSP等脚本均提供了MySQL的接口,但是显然直接使用C语言具有更好的安全性和性能,在这篇文章中能够有所体
- 一、前言如果你自己打印过东西,应该有过这种经历。如果用自己拍的图片,在手机上看感觉还是清晰可见,但是一打印出来就是漆黑一片。比如下面这两张图