0

我想知道是否有一种简单的方法可以从表 sql 中删除重复项。

如果它们出现两次,而不是获取整个表并删除数据。

先感谢您

这是我的结构:

CREATE TABLE IF NOT EXISTS `mups` (
  `idgroupe` varchar(15) NOT NULL,
  `fan` bigint(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
4

4 回答 4

1

如果您使用的是 Sql Server

检查这个:SQL SERVER – 2005 – 2008 – 删除重复行

使用CTE的示例代码:

/* Delete Duplicate records */
WITH CTE (COl1,Col2, DuplicateCount)
AS
(
SELECT COl1,Col2,
ROW_NUMBER() OVER(PARTITION BY COl1,Col2 ORDER BY Col1) AS DuplicateCount
FROM DuplicateRcordTable
)
DELETE
FROM CTE
WHERE DuplicateCount > 1
GO
于 2013-01-10T14:30:53.270 回答
0

您可以通过将表连接到自身、按要在其中查找重复项的字段进行分组以及 count 大于 1 的 having 子句来查找重复项。

假设您的表名称是客户,并且您正在寻找重复的名称字段。

select cust_out.name, count(cust_count.name)
from customers cust_out
  inner join customers cust_count on cust_out.name = cust_count.name
group by cust_out.name
having count(cust_count.name) > 1

如果您在删除语句中使用它,您将删除所有重复记录,而您可能打算保留这些记录。

所以要选择要删除的记录,

select cust_dup.id
from customers cust
  inner join customers cust_dup on cust.name = cust_dup.name and cust_dup.id > cust.id
group by cust_dup.id
于 2013-01-10T14:38:34.053 回答
0

添加一个计算列,该列采用整行的校验和。搜索任何重复的校验和,对重复项进行排名和删除。

于 2013-01-10T14:29:04.627 回答
0

你可以这样做:

DELETE from yourTable WHERE tableID in 
(SELECT clone.tableID 
 from yourTable origine,
  yourTable clone 
 where clone.tableID= origine.tableID)

但在 WHERE 中,您可以比较索引或相互比较字段...

取决于你如何找到你的双打。

请注意,此解决方案的优点是让您选择什么是双倍(例如,如果 PK 发生变化)

于 2013-01-10T14:31:52.113 回答