postgres、mysql查询重复数据并删除只保留一条

1.文章以postgres数据库为例。例如有一张用户表,id是主键,现在有id_card重复的数据。(表中id为2和5的数据)。建表sql语句在文章最后

在这里插入图片描述

2.查询重复数据并删除

SELECT MIN ( ID ) AS min_id FROM “user” GROUP BY id_card 。意思是根据id_card查询出所有的用户id(一个id对应一个id_card),然后执行完整sql表示将其余的id数据都删除,因为id本来就是不重复的,就达到了每条id保留一条的效果

SELECT * FROM "user" 
WHERE
	ID NOT IN ( SELECT MIN ( ID ) AS min_id FROM "user" GROUP BY id_card )
delete FROM "user" 
WHERE
	ID NOT IN ( SELECT MIN ( ID ) AS min_id FROM "user" GROUP BY id_card )

3.建表以及数据sql语句


DROP TABLE IF EXISTS "public"."user";
CREATE TABLE "public"."user" (
  "id" int4 NOT NULL,
  "name" varchar(255) COLLATE "pg_catalog"."default",
  "age" int4,
  "addtrss" varchar(255) COLLATE "pg_catalog"."default",
  "id_card" varchar(255) COLLATE "pg_catalog"."default",
  "sex" varchar(255) COLLATE "pg_catalog"."default",
  "habbit" varchar(255) COLLATE "pg_catalog"."default"
)
;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO "public"."user" VALUES (1, '王二', 16, '湖北', '420701199010125338', '男', '吃东西');
INSERT INTO "public"."user" VALUES (2, '张三', 18, '湖北', '420701198510245117', '男', '吃东西');
INSERT INTO "public"."user" VALUES (3, '李四', 25, '北京', '422105200405063117', '女', '睡觉');
INSERT INTO "public"."user" VALUES (4, '赵六', 30, '上海', '420103199707068531', '女', '睡觉');
INSERT INTO "public"."user" VALUES (5, '张三', 18, '湖北', '420701198510245117', '男', '吃东西');

-- ----------------------------
-- Primary Key structure for table user
-- ----------------------------
ALTER TABLE "public"."user" ADD CONSTRAINT "user_pkey" PRIMARY KEY ("id");

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值