2014-04-30 101 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,这将不会允许将来重复插入。

相关问题