删除具有重复ID的所有行

时间:2017-11-28 14:07:59

标签: sql sql-server-2012

SO上有很多帖子,其中提供的解决方案是以一种方式取出行或与其他行重复形式,只留下1行。

我正在寻找的是如何删除临时表中没有唯一ID的所有行:

ID    other_values
-----------------------------
 1    foo bar
 2    bar baz
 2    null
 2    something
 3    else

我不关心其他价值观;一旦ID不唯一,我想要所有行,结果是:

ID    other_values
-----------------------------
 1    foo bar
 3    else

我该怎么做?

4 个答案:

答案 0 :(得分:3)

试试这个:

--delete all rows from my temp-table that do not have a unique ID
DELETE from MYTABLE
WHERE ID IN (SELECT ID FROM MYTABLE GROUP BY ID HAVING COUNT(*) > 1)

答案 1 :(得分:1)

我会将DELETE命令与子查询结合使用来检测重复项

DELETE
FROM mytable
WHERE ID IN (SELECT ID FROM mytable GROUP BY ID HAVING COUNT(*) > 1)

答案 2 :(得分:-1)

使用Cte删除行。

WITH cte
AS (
    SELECT id
        ,Other_values
        ,ROW_NUMBER() OVER (
            PARTITION BY id ORDER BY id
            ) rownum
    FROM mytable
    )
DELETE
FROM cte
WHERE rownum > 1

答案 3 :(得分:-2)

计算大于1的ID。然后删除所有这些ID。

编辑: 从TABLE中删除VALUE IN(从VALUE中选择VALUE按VALUE计数(*)> 1按VALUE分组);