MYSQL-DELETE

[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
          );

這么做的話最里面的子查詢查出的結果集會比較小,外面的篩選會快很多。
_

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容