本文主要和大家分享mysql實現刪除重複數據,本文結合實例和大家講解,希望能幫助大家。
delete FROM `ex` WHERE phone in (SELECT c.phone
FROM `ex` as c
GROUP BY c.phone
#HAVING COUNT( * ) > ;1) and id not in (select max(b.id) from `ex` as b group by b.phone);
註:ex(example 表名)、根據phone字段,判斷是否重複。重複保留最新插入的一條(即自增id最大的)
但是,執行之後,結果不如你所願:
/* SQL錯誤(1093):You can't specify target table 'ex' for update in FROM clause */
翻譯:不能先select出同一表中的某些值,再update(delete)這個表(在同一語句中),即不能依據某字段值做判斷再來更新某字段的值。
問題只針對:mysql,不包含oracle、sql server等。因為mysql對子語句的支持性不是太好。
問題解決:
先select出的結果再通過中間表select一遍,select 的結果 起別名 就成為一個快取的表了, 一張虛擬的表。
如圖:就解決了mysql一條sql刪除重複訊息了。
為了大家方便:
DELETE FROM `ex` WHERE id NOT IN ( SELECT id FROM (SELECT max(b.id) AS id FROM `ex` b GROUP BY b.phone) b);
相關推薦:
以上是mysql實作刪除重複數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!