内容纲要
需求描述
From the following table, write a SQL query to remove all the duplicate emails of employees keeping the unique email with the lowest employee id. Return employee id and unique emails.
从下表中,编写一个 SQL 查询来删除员工的所有重复电子邮件,并保留具有最低员工 ID 的唯一电子邮件。 返回员工 ID 和唯一电子邮件。
table: employees
employee_id | employee_name | email_id |
---|---|---|
101 | Liam Alton | li.al@abc.com |
102 | Josh Day | jo.da@abc.com |
103 | Sean Mann | se.ma@abc.com |
104 | Evan Blake | ev.bl@abc.com |
105 | Toby Scott | jo.da@abc.com |
解决方案
以下是一个可以满足需求的 SQL 查询,该查询利用了子查询和 "NOT IN" 关键字:
DELETE FROM employees
WHERE employee_id NOT IN (
SELECT MIN(employee_id)
FROM employees
GROUP BY email_id
);
这个查询做了什么呢?
子查询:
SELECT MIN(employee_id)
FROM employees
GROUP BY email_id
这个子查询对 email_id 进行分组,并从每组中选择具有最小 employee_id 的记录。
然后,外部查询将删除不在这个子查询结果集中的所有记录,即删除所有除最小 employee_id 外的具有重复 email_id 的记录。
执行此查询后,employees 表将只包含具有唯一 email_id 的员工,并且在存在重复 email_id 的情况下,只保留具有最小 employee_id 的员工。
注意❗ : 在执行删除操作前,建议先做好数据备份,以防不可预知的错误发生。