SQL刪除重復數據只保留一條數據
阿新 • • 發佈:2018-10-04
sql span sele del can image HERE http ids
1、表結構與數據:
CREATE TABLE tablezzl( id int, name VARCHAR(255) );
2、查詢出重復的數據:
SELECT name FROM tablezzl GROUP BY name HAVING COUNT(name)>1
3、查詢出要保留的重復數據:
SELECT MIN(id) ids FROM tablezzl GROUP BY NAME HAVING COUNT(name)>1
4、最終的SQL:
DELETE FROM tablezzl WHERE 1=1 AND `name` in (SELECT* FROM ( (SELECT `name` `names` FROM tablezzl GROUP BY name HAVING COUNT(`name`)>1) ) a) AND id not in (SELECT * FROM ( (SELECT MIN(id) ids FROM tablezzl GROUP BY NAME HAVING COUNT(`name`)>1) ) b)
5、補充 :
其中這樣寫mysql中不能如下這樣寫:
DELETE FROM tablezzl WHERE 1=1 AND `name` in (SELECT `name` `names` FROMtablezzl GROUP BY name HAVING COUNT(`name`)>1) AND id not in (SELECT MIN(id) ids FROM tablezzl GROUP BY NAME HAVING COUNT(`name`)>1)
會報錯:You can‘t specify target table ‘tablezzl‘ for update in FROM clause,不能在同一表中查詢的數據作為同一表的更新數據,如模塊4的SQL包裝一下就可以解決。
SQL刪除重復數據只保留一條數據