MySQL SELECT COUNT 一对多关联查询去重

article/2025/10/5 11:09:38

文章目录

      • 1 摘要
      • 2 问题复现
      • 3 解决办法

1 摘要

在实际项目中,通常会遇到多表关联查询的问题,这个时候在做分页查询的时候,可能会出现因关联关系而导致查询数量不正确的问题。如一对多 关系时,统计 的一方数量,这时使用 SELECT COUNT 就容易出现统计数目不准,有重复的现象。

2 问题复现

举例:
有一用户表(user) 和一张 用户图像表(user_photo),用户表与用户图像表属于一对多关系,即一个用户可以拥有多张图像
用户表:

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id 主键',`user_name` varchar(30) DEFAULT NULL COMMENT '用户名',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';

用户图像表:

DROP TABLE IF EXISTS `user_photo`;
CREATE TABLE `user_photo` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '用户相册 id',
`user_id` bigint NOT NULL DEFAULT 0 COMMENT '用户 id',
`photo_url` varchar(255) NULL DEFAULT '' COMMENT '用户图片链接地址',
PRIMARY KEY (`id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户图像表';

要求: 使用分页查询用户信息,用户信息中需要包含用户的图像

查询语句:
统计用户数量:

SELECT COUNT(u.id)
FROM `user` u 
LEFT JOIN `user_photo` up ON up.user_id = u.id

查询结果:

16

实际用户数量为:

SELECT COUNT(*) 
FROM `user`;

结果为: 11

这时就出现了查询数量不准确的问题,因为是属于一对多的关系,所以,如果一个用户有两张图像的话,查询就会出现两条结果,从而导致查询数量不准确

3 解决办法

使用 DISTINCT 去除重复,保证每一个用户具有唯一性

具体查询:

SELECT COUNT(DISTINCT(u.id))
FROM `user` u 
LEFT JOIN `user_photo` up ON up.user_id = u.id

查询结果为: 11
符合实际用户数量

个人公众号:404Code,记录半个互联网人的技术与思考,感兴趣的可以关注.
404Code


http://chatgpt.dhexx.cn/article/mMpUMrCj.shtml

相关文章

Mysql 查询重复数据、去除重复数据操作

表 client 按照 client_id 字段查重,查出 client_id 重复的字段的 id : SELECT c.id from client c where c.client_id in ( SELECT c.client_id #, COUNT(*) from client c group by c.client_id having COUNT(*) > 1 ); 表数据去重操作…

MySQL 查询表中重复数据

查询重复手机号 SELECTuser_mobile FROMt_user GROUP BYuser_mobile HAVINGCOUNT( user_mobile ) > 1; 查询重复的手机号及数量 SELECTuser_mobile,COUNT(*) AS count FROMt_user GROUP BYuser_mobile HAVINGcount > 1; 查询所有重复的手机号的详细信息 SELECT* …

mysql 查询重复数据并删除

表名: articles , 内容重复字段:title, 准备过程: Navicate 数据表导出sql,将导出dsql导入到本地测试库,查看title字段为varchar类型且没有索引,本地库title设置title字段普通索引…

【MySQL】mysql:重复数据查询 sql

目录 一、准备测试表 (1)创建表 (2)查询表 (3)删除表 二、准备测试数据 (1)插入数据 (2)查询数据 三、重复数据查询 (1)查询…

mysql查询重复数据

表全部数据 ------------------- 1 查询people_no重复的记录 select * from people where people_no in (select people_no from people group by people_no having count(people_no) > 1); ---------------------- 2 查询people_no重复的记录 ,排除最小id…

mysql 查询数据库重复数据

数据库中有重复数据时,用到哪些sql语句? 建表: CREATE TABLE user (id bigint(255) NOT NULL AUTO_INCREMENT,name varchar(20) COLLATE utf8mb4_general_ci NOT NULL DEFAULT COMMENT 名称,age int(2) NOT NULL DEFAULT 0,PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT5…

mysql查询表里的重复数据方法

1 2 3 4 INSERT INTO hk_test(username, passwd) VALUES (qmf1, qmf1),(qmf2, qmf11) delete from hk_test where usernameqmf1 and passwdqmf1 MySQL里查询表里的重复数据记录: 先查看重复的原始数据: 场景一:列出username字段有重读的…

mysql过滤表中重复数据,查询表中相同数据的最新一条数据

先查询表几条demo数据,名字相同,时间不同 select id,name,create_date from sys_user 方法1:最简单,且字段全部相同,排除其他字段不同; 先对表按照时间desc排序,在查询该层使用group by 语句&#xff0…

python matplotlib 在指定的两个点之间连线

为了找到matplotlib在两个点之间连线的方法真是费了好大功夫,最后还是决定用简单的 plt.plot 来解决。如果有好多对点,则可以通过循环实现连接,还可以用 plt.arrow 画箭头,具体可参考这里 import matplotlib.pyplot as pltx [[1,…

1.11.0 pyflink使用例子

官网链接 https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/table/python/ python版本要求3.5及以上 安装pyflink python -m pip install apache-flink 如果安装下载太慢会time-out , 换pip源 代码 table_api方式 from pyflink.datastream import St…

Pypeline:一种实现Anylogic与Python连接的新工具

Pypeline:一种实现Anylogic与Python连接的新工具 Pypeline背景Pypeline安装方法和环境配置要求Pypeline使用方法 Pypeline背景 Pypeline是由Anylogic官方团队推出的一个功能插件,旨在实现运行中的Anylogic模型和本地安装好的Python的链接。换句话说就是…

Python的连接符

python的连接符主要有 加号()、逗号(,)、空格( ) 、反斜线(\)、join()的方式、 加号() #注意,只能连接字符串,如果一个…

在 Python 中连接列表——如何连接列表

将两个或多个字符串、列表或其他数据结构组合成单个实体的过程在编程中称为串联。 串联产生一个新对象,其中包含原始对象的所有组件,并按串联顺序排列。 字符串上下文中的连接是指将一个字符串连接到另一个字符串的末尾以创建更长的字符串。例如&#xf…

win10磁盘管理_win10合并磁盘分区教程

Win10怎么合并磁盘分区?在首次安装系统时我们需要对硬盘进行分区,但是在系统正常使用时也是可以对硬盘进行合并等操作的。许多用户在使用电脑的过程中可能都会遇到磁盘空间不够用的情况,那么对于磁盘空间不足,我们可以通过合并磁盘分区来解决…

win10磁盘管理 磁盘分区和合并

一、磁盘分区管理 如果是只需要给单个磁盘分区进行划分的话,我们可以采用电脑自带的磁盘管理工具进行操作。具体的步骤如下: 第一步:右击开始菜单图表,选择磁盘管理打开 第二步:在新弹出的窗口的右下边可以看到磁盘&…

计算机硬盘合并怎么弄,如何将分区的硬盘合并为一个磁盘?

使用Windows磁盘管理将两个硬盘都转换为动态磁盘。请参阅Microsoft的介绍。要将基本磁盘升级为动态磁盘,请右键单击“我的电脑”,然后选择“管理”以打开计算机管理控制台。在计算机管理中,单击“磁盘管理”,右键单击要升级到动态…

Windows 10 创建 删除 合并磁盘分区

Windows 10 创建 删除 合并磁盘分区 右键我的电脑 管理 磁盘管理 选择一个空间比较大的磁盘分区 右键 压缩卷 自己选择一个合适的压缩范围,进行压缩 新建分区完成 右键新建分区 选择添加卷 看新建完成的F盘 新建分区就结束啦 然后是删除分区磁盘: …

计算机如何将两个磁盘合在一起,win10怎么把电脑自带的两个磁盘合并到一起

2019-10-06阅读(447) 合并分区时,要扩展的磁盘没有“扩展卷”选项,是因为整个硬盘上没有空白卷可扩展。所以,要合并分区,应该先准备出要合并的空间大小。方法步骤进入磁盘管理:按win+x选磁盘管理,进主界面2.如要将上图1G的恢复分区合并到C盘,应:直接删除该恢复分区,得…

Win10电脑如何合并磁盘分区

电脑空间不足怎么办?很多网友可能都被这个问题困扰过,其实我们可以通过管理磁盘分区来缓解空间不足的问题,把多余的空间合并起来就行了,现在来看看该如何操作吧。 更多系统教程尽在小白系统重装官网 系统:win10专业版…

Win7分割合并磁盘

如何在Windows7系统下对硬盘进行分区?很多时候我们出于某些原因需要在硬盘上划分一块新区域,说到这里,大家可能想到了很多第三方的硬盘分区工具,其实在Win7中不需要繁琐的操作和第三方软件就可以在系统下直接进行分区。 首先点击“…