Mysql,删除重复项,只保留一条数据。

68 篇文章 0 订阅
48 篇文章 0 订阅

 

       在本次面试中,面试官提出了一个SQL删除的语句:一张表中,主键id,name 等字段。其中,name含有多条重复数据。现在,对这些重复的name数据只保留一条,其余的删除。

 

        以下是具体的讲解,希望能够帮到大家。

 

1、表结构如下:


CREATE TABLE moon_user (
  id int(11) NOT NULL AUTO_INCREMENT COMMENT '主键, id值',
  name varchar(255) DEFAULT NULL COMMENT '姓名',
  PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='用户表,用于测试.';

 

     插入一些测试数据:


INSERT INTO moon_user (id, name) VALUES ('1', '张三年');
INSERT INTO moon_user (id, name) VALUES ('2', '李四');
INSERT INTO moon_user (id, name) VALUES ('3', '张三');
INSERT INTO moon_user (id, name) VALUES ('4', '李四');
INSERT INTO moon_user (id, name) VALUES ('5', '张三');
INSERT INTO moon_user (id, name) VALUES ('7', '李二狗');
INSERT INTO moon_user (id, name) VALUES ('8', '张三');
INSERT INTO moon_user (id, name) VALUES ('9', '王大锤');
INSERT INTO moon_user (id, name) VALUES ('10', '刘江');
INSERT INTO moon_user (id, name) VALUES ('12', '赵武');
INSERT INTO moon_user (id, name) VALUES ('13', '张三年');
INSERT INTO moon_user (id, name) VALUES ('14', '杨峰');

 

2、具体的SQL语句如下,注意由于使用的是Mysql数据库,在子查询中需要使用临时表 tab_a, 不然会报错。Oracle数据库中,据说是可以不使用临时表,我明天到Oracle数据库中写一些SQL语句测试一下,哈哈。(^_^)

 


DELETE FROM moon_user
WHERE id NOT IN (
  SELECT tab_a.id
  FROM (
	 SELECT MIN(id) AS id
	 FROM moon_user
	 GROUP BY name
  ) tab_a
);

 

参考文章:  MySQL 中 You can't specify target table '表名' for update in FROM clause错误解决办法       

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值