LeetCode //SQL - 196. Delete Duplicate Emails

发布于:2024-07-08 ⋅ 阅读:(27) ⋅ 点赞:(0)

196. Delete Duplicate Emails

Table: Person

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

Write a solution to delete all duplicate emails, keeping only one unique email with the smallest id.

For SQL users, please note that you are supposed to write a DELETE statement and not a SELECT one.

For Pandas users, please note that you are supposed to modify Person in place.

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 result format is in the following example.
 

Example 1:

Input:
Person table:
±—±-----------------+
| id | email |
±—±-----------------+
| 1 | john@example.com |
| 2 | bob@example.com |
| 3 | john@example.com |
±—±-----------------+
Output:
±—±-----------------+
| id | email |
±—±-----------------+
| 1 | john@example.com |
| 2 | bob@example.com |
±—±-----------------+
Explanation: john@example.com is repeated two times. We keep the row with the smallest Id = 1.

From: LeetCode
Link: 196. Delete Duplicate Emails


Solution:

Ideas:
  1. DELETE p1: This specifies that we want to delete rows from the table alias p1.
  2. FROM Person p1 JOIN Person p2: We join the Person table with itself.
  3. ON p1.email = p2.email AND p1.id > p2.id: This condition ensures that we are only deleting rows where the email is the same but the id of p1 is greater than the id of p2. This effectively keeps the row with the smallest id for each email.
Code:
DELETE p1 
FROM Person p1
JOIN Person p2 
ON p1.email = p2.email AND p1.id > p2.id;

网站公告

今日签到

点亮在社区的每一天
去签到