我想知道是否有一种简单的方法可以从表 sql 中删除重复项。
如果它们出现两次,而不是获取整个表并删除数据。
先感谢您
这是我的结构:
CREATE TABLE IF NOT EXISTS `mups` (
`idgroupe` varchar(15) NOT NULL,
`fan` bigint(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我想知道是否有一种简单的方法可以从表 sql 中删除重复项。
如果它们出现两次,而不是获取整个表并删除数据。
先感谢您
这是我的结构:
CREATE TABLE IF NOT EXISTS `mups` (
`idgroupe` varchar(15) NOT NULL,
`fan` bigint(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
如果您使用的是 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
您可以通过将表连接到自身、按要在其中查找重复项的字段进行分组以及 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
添加一个计算列,该列采用整行的校验和。搜索任何重复的校验和,对重复项进行排名和删除。
你可以这样做:
DELETE from yourTable WHERE tableID in
(SELECT clone.tableID
from yourTable origine,
yourTable clone
where clone.tableID= origine.tableID)
但在 WHERE 中,您可以比较索引或相互比较字段...
取决于你如何找到你的双打。
请注意,此解决方案的优点是让您选择什么是双倍(例如,如果 PK 发生变化)