所以我在这里遇到需要删除重复记录的情况。 这里的场景是我有5个关键字段。 4个字段是实际数据,第5个字段是自动生成的唯一编号。 因此,当我仅使用这4个字段来检查使用组的计数时,我有大约400条记录的副本。但是这些重复记录的唯一编号是不同的(我们可以删除具有唯一编号最大值的记录)。 有没有办法删除这些重复记录? 这些是其他6个非主要关键字段,但它们仅供参考。
比如说:
+----------+-------+---------+---------+-----------+
| Field | Field | Field 3 | Field 4 | Unique,Id |
| 1 | 2 | | | |
+----------+-------+---------+---------+-----------+
| Batman | 100 | 50 | Chicago | 100 |
+----------+-------+---------+---------+-----------+
| Batman | 100 | 50 | Chicago | 101 |
+----------+-------+---------+---------+-----------+
| Superman | 50 | 50 | Florida | 102 |
+----------+-------+---------+---------+-----------+
| Flash | 90 | 40 | London | 103 |
+----------+-------+---------+---------+-----------+
| Flash | 90 | 40 | London | 104 |
+----------+-------+---------+---------+-----------+
在此示例中,前4个字段是实际数据字段。
所以你可以看到蝙蝠侠和flash有重复的值(前4个字段),但唯一的id是不同的。因此,我需要从每个记录中删除一条记录,以便它们不会重复。可以删除该重复记录的唯一ID的最大值。所以102和104是蝙蝠侠和Flash的最大唯一id值,应删除它们。
请帮我解决这个问题。
答案 0 :(得分:0)
请尝试此查询:
DELETE
FROM
MYTABLE
FROM
MYTABLE
LEFT JOIN
(
SELECT
FIELD1,FIELD2,FIELD3,FIELD4,MIN(ID) AS ID
FROM
MYTABLE
GROUP BY
FIELD1,FIELD2,FIELD3,FIELD4
)TbMain
ON
MYTABLE.FIELD1=TbMain.FIELD1
AND
MYTABLE.FIELD2=TbMain.FIELD2
AND
MYTABLE.FIELD3=TbMain.FIELD3
AND
MYTABLE.ID =TbMain.ID
WHERE
TbMain.ID IS NULL
答案 1 :(得分:-1)
您可以使用CTE进行此操作。
WITH cte as (
select
ROW_NUMBER() OVER ( PARTITION BY FIELD1 ORDER BY ID) FirstOcurrence,
*
from mySuperHeroTable
)
delete from cte where FirstOcurrence <> 1
编辑:
我建议您在运行删除后在Field1上添加Unique constraint。这样你就不会再遇到这种情况了。
ALTER TABLE mySuperHeroTable ADD CONSTRAINT UQ_mySuperHeroTable_Field1 UNIQUE (Field1);