2014-04-30 98 views
0

我有這樣的事情:如何刪除在MySQL行具有相同的值列

col1 col2 col3 
A  B C 
A  B C 

我想只有一排留出的這些和其他被刪除。什麼查詢實現?

+0

容易 - '刪除頂部(1)從表' –

+0

@Uriel_SVK他想刪除除第一個以外的所有東西。 – Taemyr

+0

這些行上是否有唯一鍵? – Taemyr

回答

0

你可以試試;

delete from table where col1 = 'A' and col2 = 'B' and col3 = 'C' limit 1; 

您可以在限制子句中使用記錄計數等來刪除更多記錄。

2

如果你想都複製被刪除,試試這個:

DELETE m.* 
FROM mytable m 
INNER JOIN 
    (SELECT col1, 
    col2, 
    col3, 
    COUNT(*) 
    FROM mytable 
    GROUP BY col1, 
    col2, 
    col3 
    HAVING COUNT(*)>1 
) t 
ON m.col1 =t.col1 
AND m.col2=t.col2 
AND m.col3=t.col3 

SQL Fiddle

編輯

當你編輯了自己的問題,並希望二分之一的重複行保留,您可以使用以下行輕鬆實現此目的:

ALTER IGNORE TABLE mytable ADD UNIQUE INDEX idx_yourindexname (col1, col2, col3); 

這將刪除所有重複行,以便只保留唯一的行。 IGNORE關鍵字是強制性的,因爲您已經有數據違反表中的INDEX。 Movereover,這將不會允許將來重複插入。

相關問題