此表只有2列。當兩行的列匹配時,有行被認爲是「重複的」。MySQL的 - 如何刪除重複的行(但離開1行)給出2列?
即:
col1 col2
X X
X X
X Y -- this is not a duplicate
我想刪除重複,但留給他們的至少一個。無所謂,因爲它們是同一件事。
我已經使用IN
和JOIN
的變體,但我似乎無法獲得DELETE外部查詢只刪除具有重複列的每一行中的一個。
此表只有2列。當兩行的列匹配時,有行被認爲是「重複的」。MySQL的 - 如何刪除重複的行(但離開1行)給出2列?
即:
col1 col2
X X
X X
X Y -- this is not a duplicate
我想刪除重複,但留給他們的至少一個。無所謂,因爲它們是同一件事。
我已經使用IN
和JOIN
的變體,但我似乎無法獲得DELETE外部查詢只刪除具有重複列的每一行中的一個。
試試這個:
DELETE a
FROM mytable a
LEFT JOIN
(
SELECT MIN(ID) ID, col1, col2
FROM mytable
GROUP BY col1, col2
) b ON a.ID = b.ID AND
a.col1 = b.col1 AND
a.col2 = b.col2
WHERE b.ID IS NULL
假設ID作爲主鍵列
編輯:
不過,如果你沒有這個編號C olumn那麼你可以嘗試這樣的:
ALTER IGNORE TABLE mytable
ADD UNIQUE INDEX all_columns_uq
(col1, col2) ;
「此表只有2列。」 – Arth
@位置: - 感謝您指出。更新了我的答案。 –
ALTER IGNORE TABLE table1 ADD UNIQUE INDEX idx_name (col1,col2);
OR
CREATE TABLE table1_temp AS
SELECT * FROM table1 GROUP BY col1, col2;
TRUNCATE TABLE table1;
INSERT INTO table1 SELECT * FROM table1_temp;
DROP TABLE table1_temp;
您可以在現場的桌面第二種方法雖然也可以是任何其他丟失數據引用它的表可能不太高興!
我建議添加獨特的索引,以便將來證明自己。
@strawberry請不要編輯我的答案,以刪除大塊的文本,並做出自己的首選/表面變化..如果你想建議更改添加評論。 – Arth
你的PRIMARY KEY是什麼?和哪個版本的MySQL? – Strawberry
[刪除MySQL中的重複行]可能的重複(http://stackoverflow.com/questions/3311903/remove-duplicate-rows-in-mysql) – Jens
沒有主鍵。並且版本:5.5.35-0ubuntu0.12.04.2 – CMCDragonkai