Write a SQL query to find all duplicate emails in a table named Person
.
+----+---------+ | Id | Email | +----+---------+ | 1 | a@b.com | | 2 | c@d.com | | 3 | a@b.com | +----+---------+
For example, your query should return the following for the above table:
+---------+ | Email | +---------+ | a@b.com | +---------+
Note: All emails are in lowercase.
這道題讓我們求重復的郵箱,那么最直接的方法就是用Group by...Having Count(*)...的固定搭配來做,代碼如下:
解法一:
SELECT Email FROM Person GROUP BY Email HAVING COUNT(*) > 1;
我們還可以用內交來做,用Email來內交兩個表,然后返回Id不同的行,則說明兩個不同的人使用了相同的郵箱:
解法二:
SELECT DISTINCT p1.Email FROM Person p1 JOIN Person p2 ON p1.Email = p2.Email WHERE p1.Id <> p2.Id;
參考資料:
https://leetcode.com/discuss/53206/a-solution-using-a-group-by-and-another-one-using-a-self-join