返回
LeetCode 数据库 SQL 练习:祛除重复的电子邮件地址
见解分享
2023-12-10 08:22:09
消除重复数据:维护数据库完整性的关键
在构建和维护数据库时,确保数据的完整性和准确性至关重要。重复的数据不仅会造成混乱,还会导致错误的分析和决策。因此,在设计数据库架构时,消除重复项是重中之重,我们可以通过唯一性约束和触发器等方法来实现。
LeetCode 挑战:删除重复的电子邮件地址
为了加深对处理重复数据的理解,我们不妨通过一个来自 LeetCode 的练习来实践一下。这个练习要求我们编写一个 SQL 查询,从 Person 表中删除所有重复的电子邮件地址,同时保留每个电子邮件地址中最小的 ID。
解决步骤
解决这个问题的步骤如下:
- 创建临时表: 创建一个临时表来存储所有不同的电子邮件地址及其最小 ID。
CREATE TEMP TABLE UniqueEmails AS
SELECT MIN(Id), Email
FROM Person
GROUP BY Email;
- 删除重复项: 使用 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 查询消除数据库中重复数据的方法。这种技术对于维护数据完整性和确保准确的分析至关重要。下次遇到重复数据问题时,不妨尝试使用类似的方法来清理数据。
常见问题解答
-
为什么要消除重复数据?
- 重复的数据会造成混乱,导致错误的分析和决策。
-
有哪些方法可以消除重复数据?
- 唯一性约束、触发器和创建临时表等方法。
-
如何使用临时表消除重复数据?
- 创建一个包含唯一数据及其最小 ID 的临时表,然后使用 NOT IN 子查询删除重复项。
-
删除重复数据后会发生什么?
- 保留每个唯一数据中最小的 ID。
-
维护数据完整性有哪些好处?
- 提高数据质量,减少错误的可能性,并改善决策制定。