程序员

数据库:使用自关联实现查询单表或多表中的重复数据(通用)

作者:admin 2021-07-12 我要评论

单表仅查询重复数据 1.首先建一张表 -- 建表tttttt DROP TABLE IF EXISTS tttttt ; CREATE TABLE tttttt ( t int ( 10 ) NULL DEFAULT NULL , y int ( 10 ) NULL...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

单表仅查询重复数据

1.首先建一张表

-- 建表tttttt
DROP TABLE IF EXISTS `tttttt`;
CREATE TABLE `tttttt`  (
  `t` int(10) NULL DEFAULT NULL,
  `y` int(10) NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci

-- 插入测试数据
INSERT INTO `tttttt` VALUES (1, 1);
INSERT INTO `tttttt` VALUES (1, 1);
INSERT INTO `tttttt` VALUES (2, 2);
INSERT INTO `tttttt` VALUES (2, 3);
INSERT INTO `tttttt` VALUES (3, 3);
INSERT INTO `tttttt` VALUES (8, 8);
INSERT INTO `tttttt` VALUES (8, 8);

可以得到下列表数据。很明显,有四行数据是完全重复的
在这里插入图片描述
2.仅查询重复数据。

思路:这时候我们可以使用自关联查询。将tttttt表虚拟化(起别名)出第二张表,然后与表tttttt本身比较。然后使用count函数计数,当符合两张表的两列数据完全相等时加1。最后通过count()>1来过滤掉那些不重复的数据。

SELECT a.* FROM tttttt a WHERE ( SELECT COUNT(*) FROM tttttt WHERE tttttt.t= a.t AND tttttt.y = a.y) > 1;

在这里插入图片描述

多表仅查询重复数据

1.创建yyyyyy表

-- 创建yyyyyy表
DROP TABLE IF EXISTS `yyyyyy`;
CREATE TABLE `yyyyyy`  (
  `q` int(10) NULL DEFAULT NULL,
  `w` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci

-- 插入测试数据
INSERT INTO `yyyyyy` VALUES (1, '1');
INSERT INTO `yyyyyy` VALUES (8, '1');
INSERT INTO `yyyyyy` VALUES (3, '1');

插入数据后,可以得到下列数据。
在这里插入图片描述
然后用tttttt使用inner join关联yyyyyy表。得到下列数据。
在这里插入图片描述
思路:即使是多表查询,最后查出来的结果我们可以作为中间表使用。中间表自关联,需要查询的字段对比,还是使用count(*)来计数,最后过滤掉那些不大于1的数据行。

SELECT zb.* FROM 
 (SELECT a.*,b.* FROM tttttt a INNER JOIN yyyyyy b ON a.t = b.q) zb 
   WHERE 
    (SELECT COUNT(*) FROM (SELECT a.*,b.* FROM tttttt a INNER JOIN yyyyyy b ON a.t = b.q) zb1 
	  WHERE zb.t = zb1.t AND zb.y = zb1.y AND zb.q = zb1.q AND zb.w = zb1.w) > 1;

执行结果如下:
在这里插入图片描述

;原文链接:https://blog.csdn.net/good_good_xiu/article/details/115690053

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 数智洞察丨和死神赛跑,那些不得不“闯

    数智洞察丨和死神赛跑,那些不得不“闯

  • 酒店小程序开发瑞蚁解决方案

    酒店小程序开发瑞蚁解决方案

  • 自建Kubernetes集群如何使用阿里云CSI

    自建Kubernetes集群如何使用阿里云CSI

  • 【kafka运维】数据迁移、分区副本重分

    【kafka运维】数据迁移、分区副本重分

腾讯云代理商
海外云服务器