在資料庫操作中,查找重複資料是常見需求。本文針對 LeetCode 風格的「Duplicate Emails」題目,詳細解析如何使用 MySQL 查詢 Person 表中重複出現的電子郵件地址。
給定一個名為 Person 的表,結構如下:
+----+---------+ | Id | Email | +----+---------+ | 1 | a@b.com | | 2 | c@d.com | | 3 | a@b.com | +----+---------+
需編寫 SQL 查詢,找出所有重複的郵箱。對於上述範例,預期結果為:
+---------+ | Email | +---------+ | a@b.com | +---------+
核心思路是自連接:將表與自身連接,比較不同 ID 但相同 Email 的記錄。
# Write your MySQL query statement below SELECT DISTINCT a.Email FROM Person a JOIN Person b ON a.Email = b.Email WHERE a.Id <> b.Id
Person a JOIN Person b 讓同一張表參與兩次查詢,分別作為左右表。DISTINCT 確保輸出結果不重複。a.Id <> b.Id 排除同一行與自身比較的情況,僅保留真正重複的記錄。亦可使用 GROUP BY 配合 HAVING 實現:
SELECT Email FROM Person GROUP BY Email HAVING COUNT(*) > 1
此寫法語意更清晰,效能通常亦不錯,視索引情況而定。