Mysql_项目6:delete的使用(删除重复的邮箱并保留最小ID的记录)

项目6:删除重复的邮箱并保留最小ID的记录(难度:简单)

编写一个 SQL 查询,来删除 email 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。

+----+---------+

| Id | Email | 

+----+---------+

| 1 | [email protected] |

| 2 | [email protected] |

| 3 | [email protected] |

+----+---------+ 

Id 是这个表的主键。

例如,在运行你的查询语句之后,上面的 Person表应返回以下几行:

扫描二维码关注公众号,回复: 5887993 查看本文章

+----+------------------+

| Id | Email |

+----+------------------+

| 1 | [email protected] |

| 2 | [email protected] |

+----+------------------+

 

-- 创建表

-- 创建表
CREATE TABLE email (
id int(11) NOT NULL AUTO_INCREMENT,
email varchar(20) NOT NULL,
PRIMARY KEY (`id`));

-- 插入数据
INSERT INTO `email` VALUES ('1', '[email protected]');
INSERT INTO `email` VALUES ('2', '[email protected]');
INSERT INTO `email` VALUES ('3', '[email protected]');
INSERT INTO `email` VALUES ('4', '[email protected]');
INSERT INTO `email` VALUES ('5', '[email protected]');

情景一:用delete删除后再查询:

DELETE a.*
FROM email a,email b
WHERE a.email = b.email
AND a.id<b.id

SELECT * FROM email;

情景二:不用delete删除的方法,只是查询:

方法1:

SELECT *
from email
GROUP BY email
HAVING count(email)<2
-- 上面是查询出email不重复的数据
UNION
-- 下面是查询出id小的那些重复的数据 
SELECT a.*
from email a,email b
WHERE a.email=b.email
AND a.id < b.id

方法2:

SELECT * 
FROM email
WHERE id not in(
                  SELECT a.id
                  from email a,email b
                  WHERE a.email=b.email
                  AND a.id > b.id
          )

猜你喜欢

转载自www.cnblogs.com/wodexk/p/10706612.html