返回

LeetCode 数据库 SQL 练习:祛除重复的电子邮件地址

见解分享

消除重复数据:维护数据库完整性的关键

在构建和维护数据库时,确保数据的完整性和准确性至关重要。重复的数据不仅会造成混乱,还会导致错误的分析和决策。因此,在设计数据库架构时,消除重复项是重中之重,我们可以通过唯一性约束和触发器等方法来实现。

LeetCode 挑战:删除重复的电子邮件地址

为了加深对处理重复数据的理解,我们不妨通过一个来自 LeetCode 的练习来实践一下。这个练习要求我们编写一个 SQL 查询,从 Person 表中删除所有重复的电子邮件地址,同时保留每个电子邮件地址中最小的 ID。

解决步骤

解决这个问题的步骤如下:

  1. 创建临时表: 创建一个临时表来存储所有不同的电子邮件地址及其最小 ID。
CREATE TEMP TABLE UniqueEmails AS
SELECT MIN(Id), Email
FROM Person
GROUP BY Email;
  1. 删除重复项: 使用 NOT IN 子查询从 Person 表中删除不在 UniqueEmails 表中的电子邮件地址。
DELETE FROM Person
WHERE Email NOT IN (SELECT Email FROM UniqueEmails);

代码示例

为了更好地理解这一过程,我们使用以下示例数据进行演示:

CREATE TABLE Person (
    Id INT PRIMARY KEY,
    Name VARCHAR(255),
    Email VARCHAR(255)
);

INSERT INTO Person (Id, Name, Email) VALUES
(1, 'John Doe', 'johndoe@example.com'),
(2, 'Jane Smith', 'janesmith@example.com'),
(3, 'John Doe', 'johndoe@example.com'),
(4, 'Jane Smith', 'janesmith@example.com');

运行查询后,重复的电子邮件地址将被删除,只保留 ID 最小的记录:

SELECT * FROM Person;

输出:

+----+-------+-----------+
| Id | Name   | Email      |
+----+-------+-----------+
| 1  | John Doe | johndoe@example.com |
| 2  | Jane Smith | janesmith@example.com |
+----+-------+-----------+

结论

通过解决这个 LeetCode 练习,我们掌握了使用 SQL 查询消除数据库中重复数据的方法。这种技术对于维护数据完整性和确保准确的分析至关重要。下次遇到重复数据问题时,不妨尝试使用类似的方法来清理数据。

常见问题解答

  1. 为什么要消除重复数据?

    • 重复的数据会造成混乱,导致错误的分析和决策。
  2. 有哪些方法可以消除重复数据?

    • 唯一性约束、触发器和创建临时表等方法。
  3. 如何使用临时表消除重复数据?

    • 创建一个包含唯一数据及其最小 ID 的临时表,然后使用 NOT IN 子查询删除重复项。
  4. 删除重复数据后会发生什么?

    • 保留每个唯一数据中最小的 ID。
  5. 维护数据完整性有哪些好处?

    • 提高数据质量,减少错误的可能性,并改善决策制定。