Skip to content

Latest commit

 

History

History
81 lines (65 loc) · 2.01 KB

File metadata and controls

81 lines (65 loc) · 2.01 KB

中文文档

Description

Table: Person

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| email       | varchar |
+-------------+---------+
id is the primary key column for this table.
Each row of this table contains an email. The emails will not contain uppercase letters.

 

Write an SQL query to delete all the duplicate emails, keeping only one unique email with the smallest id. Note that you are supposed to write a DELETE statement and not a SELECT one.

After running your script, the answer shown is the Person table. The driver will first compile and run your piece of code and then show the Person table. The final order of the Person table does not matter.

The query result format is in the following example.

 

Example 1:

Input: 
Person table:
+----+------------------+
| id | email            |
+----+------------------+
| 1  | [email protected] |
| 2  | [email protected]  |
| 3  | [email protected] |
+----+------------------+
Output: 
+----+------------------+
| id | email            |
+----+------------------+
| 1  | [email protected] |
| 2  | [email protected]  |
+----+------------------+
Explanation: [email protected] is repeated two times. We keep the row with the smallest Id = 1.

Solutions

SQL

DELETE
FROM
    Person
WHERE
    Id NOT IN (
    SELECT
        MIN( Id )
    FROM
        ( SELECT * FROM Person ) AS p
    GROUP BY
        p.Email
    );
DELETE p2
FROM
    person AS p1
    JOIN person AS p2 ON p1.email = p2.email
WHERE
    p1.id < p2.id;