0

我在 SQL 2008 中有一个数据库,其中有超过 200 万行(它是从 CSV 创建的)。我正在尝试删除具有唯一数据的行。每当我运行它时,它都会说大约有 12000 - 13000 行受到影响。如何删除我想要在 1 个步骤中删除的所有行,而不是每次都执行它?我知道每次 b/c 我经常对其进行计数时它都会删除行。它将永远以我正在前进的速度带走我。可以修改此代码以执行我需要的操作吗?

WITH numbered AS (
SELECT ROW_NUMBER() OVER(PARTITION BY name, size, lastwritetime 
ORDER BY name, size, lastwritetime) 
AS _dupe_num FROM AllFiles 
WHERE name = name
AND   size = size
AND   lastwritetime = lastwritetime
)
DELETE FROM numbered WHERE _dupe_num = 1;
4

1 回答 1

0

重新阅读问题并了解发布者想要保留重复项后,这是一个声明,用于保留所有具有重复项的记录(假设一个名为 id 的 PK 字段):

DELETE af FROM AllFiles af
WHERE NOT EXISTS (
    SELECT 1
    FROM AllFiles af2
    WHERE af2.name = af.name
    AND af2.size = af.size
    AND af2.lastwritetime = af.lastwritetime
    AND af2.id <> af.id)

编辑:如果您只想保留每条重复记录的单个副本并删除所有没有重复的记录,请使用以下语句:

DELETE af FROM AllFiles af
WHERE NOT EXISTS (
    SELECT 1
    FROM AllFiles af2
    WHERE af2.name = af.name
    AND af2.size = af.size
    AND af2.lastwritetime = af.lastwritetime
    AND af2.id <> af.id)
OR EXISTS (
    SELECT 1
    FROM AllFiles af3
    WHERE af3.name = af.name
    AND af3.size = af.size
    AND af3.lastwritetime = af.lastwritetime
    AND af3.id > af.id)
于 2012-12-06T15:40:37.243 回答