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

2021/12/8 19:18:18

本文主要是介绍【MySQL】mysql:重复数据查询 sql,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录

一、准备测试表

(1)创建表

(2)查询表

(3)删除表

二、准备测试数据

(1)插入数据

(2)查询数据

三、重复数据查询

(1)查询 numid 相同,而 testname 不同,不包括同 numid 同 testname 的数据

(2)查询 numid 相同,而 testname 不同,包括同 numid 同 testname 的数据

(3)查询 numid 相同,而 testname 不同,留去重后的同 numid 同 testname 的数据(留 id 最大的)



一、准备测试表

(1)创建表

-- 创建表:重复测试表 repeat_tab1,主键 id 自增,numid、testname 必填
CREATE TABLE IF NOT EXISTS `repeat_tab1`(
   `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
   `numid` VARCHAR(10) NOT NULL COMMENT '编号:可重复',
   `testname` VARCHAR(20) NOT NULL COMMENT '名称:可重复',
   PRIMARY KEY ( `id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='重复测试表';

 


(2)查询表

-- 查询:重复测试表 repeat_tab1
SELECT
	*
FROM
	repeat_tab1;

 


(3)删除表

-- 删除表:重复测试表 repeat_tab1
DROP TABLE repeat_tab1;

 



二、准备测试数据

(1)插入数据

-- 插入数据:重复测试表 repeat_tab1
INSERT INTO repeat_tab1 ( numid, testname )
VALUES
	( 1, '吴一' ),
	( 1, '吴一' ),
	( 1, '陈二' ),
	( 2, '张三' ),
	( 2, '李四' ),
	( 3, '王五' );

 


(2)查询数据

-- 查询:重复测试表 repeat_tab1
SELECT
	*
FROM
	repeat_tab1;

 



三、重复数据查询

(1)查询 numid 相同,而 testname 不同,不包括同 numid 同 testname 的数据

  

-- 查询:重复测试表 repeat_tab1,查询 numid 相同,而 testname 不同,不包括同 numid 同 testname 的数据,并根据 numid 升序排列
SELECT
	* 
FROM
	repeat_tab1 
WHERE
	numid IN ( SELECT numid FROM repeat_tab1 GROUP BY numid HAVING count( numid ) > 1 ) 
	AND 
	testname IN ( SELECT testname FROM repeat_tab1 GROUP BY testname HAVING count( testname ) = 1 ) 
ORDER BY
	numid ASC;


(2)查询 numid 相同,而 testname 不同,包括同 numid 同 testname 的数据

-- 查询:重复测试表 repeat_tab1,查询 numid 相同,而 testname 不同,包括同 numid 同 testname 的数据,并根据 numid 升序排列
SELECT
	* 
FROM
	repeat_tab1 
WHERE
	numid IN ( SELECT numid FROM repeat_tab1 GROUP BY numid HAVING count( numid ) > 1 ) 
	AND 
	testname IN ( SELECT testname FROM repeat_tab1 GROUP BY testname HAVING count( testname ) >= 1 ) 
ORDER BY
	numid ASC;


(3)查询 numid 相同,而 testname 不同,留去重后的同 numid 同 testname 的数据(留 id 最大的)

-- 查询:重复测试表 repeat_tab1,查询 numid 相同,而 testname 不同,留去重后的同 numid 同 testname 的数据(留 id 最大的),并根据 numid 升序排列
SELECT
	* 
FROM
	repeat_tab1 
WHERE
	numid IN ( SELECT numid FROM repeat_tab1 GROUP BY numid HAVING count( numid ) > 1 ) 
	AND
	id IN ( SELECT MAX(id) FROM repeat_tab1 GROUP BY testname HAVING count( testname ) >= 1 ) 
ORDER BY
	numid ASC;



这篇关于【MySQL】mysql:重复数据查询 sql的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程