[https://leetcode.com/problems/delete-duplicate-emails/]
MYSQL的DETETE語句,包含子查詢時,如果子查詢與被刪除數(shù)據(jù)的表是一張表,會出錯。像下面這樣是不行的。
DELETE FROM person
WHERE id NOT IN (
SELECT MIN(Id)
FROM person
GROUP BY Email
)
解決辦法是在子查詢語句里再嵌套一個子查詢,像下面這樣。
DELETE FROM person
WHERE id NOT IN (
SELECT MIN(Id)
FROM (
SELECT * FROM person
) AS t
GROUP BY t.Email
);
然而,這樣就超時了,效率太低,因為子查詢是SELECT * FROM person,直接把全表拿來了,沒做任何處理。較好的做法如下:
DELETE FROM Person
WHERE Id NOT IN (SELECT Id
FROM
(SELECT MIN(Id) AS Id
FROM Person
GROUP BY Email
) p
);
這么做的話最里面的子查詢查出的結果集會比較小,外面的篩選會快很多。
_