当前位置: 首页 > 面试题库 >

使用临时表删除重复记录

宋育
2023-03-14
问题内容

请使用以下tsql查询:

DECLARE @table TABLE(data VARCHAR(20))
INSERT INTO @table VALUES ('not duplicate row')
INSERT INTO @table VALUES ('duplicate row')    
INSERT INTO @table VALUES ('duplicate row')    
INSERT INTO @table VALUES ('second duplicate row')    
INSERT INTO @table VALUES ('second duplicate row')

SELECT   data    
INTO     #duplicates    
FROM     @table    
GROUP BY data    
HAVING   COUNT(*) > 1

-- delete all rows that are duplicated   
DELETE   FROM @table    
FROM     @table o INNER JOIN #duplicates d
         ON d.data = o.data

-- insert one row for every duplicate set    
INSERT   INTO @table(data)    
         SELECT   data    
         FROM     #duplicates

我知道它在做什么,但是逻辑的最后一部分(对于每个重复集,在–
insert一行之后)没有意义。在我们有用于删除所有重复行的代码集的地方,这消除了重复行,那么上一节的内容是什么?

该查询发现这里

谢谢


问题答案:

在我们有用于删除所有重复行的代码集的地方,这消除了重复行,那么上一节的内容是什么?

首先,它删除曾经有重复的所有行。也就是说,所有行,并且原始也。在上述情况下,'not duplicate row'后面的表格中仅保留一行()DELETE。其他所有四行将被删除。

然后,再次使用删除的行填充表,但是现在删除了重复项。

这不是删除重复项的最佳方法。

最好的方法是:

WITH q AS (
          SELECT data, ROW_NUMBER() OVER (PARTITION BY data ORDER BY data) AS rn
          FROM @table
          )
DELETE
FROM      q
WHERE     rn > 1


 类似资料:
  • 问题内容: 我已经看到了许多变化,但是没有什么与我要完成的工作完全匹配。 我有一张表格,其中包含用户对可配置问卷的回答。列为。 不知何故,一些成员两次提交了答案。因此,我需要删除重复的记录,但要确保保留一排。 没有 主 列,因此可能有两行或三行的数据完全相同。 是否有查询以删除所有重复项? 问题答案: 在表上添加 唯一索引 : 另一种方法是: 在表中添加主键,然后可以使用以下查询轻松地从表中删除重

  • 本文向大家介绍sql 删除表中的重复记录,包括了sql 删除表中的重复记录的使用技巧和注意事项,需要的朋友参考一下 遇见了表中存在重复的记录的问题,直接写sql删除时最快的,才不要慢慢的复制到excel表中慢慢的人工找呢 如下sql,找出重复的记录,和重复记录中ID值最小的记录(表中ID为自增长) 然后就可以直接删除,基本原理就是,找到重复记录的每一条记录,排除掉重复id最小的记录,删除剩余的重复

  • 问题内容: 嗨,在这里我遇到了一种情况,即由于错误地没有删除表,我已经运行了该表的批处理文件,该文件由一些详细的插入语句组成 我有一个像alert_priority的表由类似 现在错误地没有删除 alert_priority 我已经执行了表的脚本文件,其中包含一些插入语句,现在执行脚本后,我在表中的记录就像 现在,我想删除多余的记录(Id 3之后的记录),并且在执行脚本文件之前,我应该拥有所有存在

  • 问题内容: 请帮助我了解基于rownum的删除记录,即使id重复,也不会发生,但是如果是这样的话。 查询已尝试,但删除所有6行。 但是此查询给出正确的结果: 预期结果 : 问题答案: 使用 当然,您也可以这样做。该所以你是否删除具有较大的行或较小的地址不要紧只是该行的物理地址。 但是,您的预期结果没有任何意义。 该结果集的总是在查询时分配。这意味着在不同的查询中(或同一查询多次运行时)特定的行可能

  • 问题内容: 朋友们, 我正在创建一个临时表。该脚本可能会运行几次,因此我需要检查临时表是否存在,然后将其删除。我已经在下面编写了代码,但是两次运行脚本时出现错误,表明该表已经存在: 数据库中已经有一个名为“#lu_sensor_name_19”的对象 。 当Tablle不为null时,似乎不会返回true。我究竟做错了什么? 问题答案: Temp #Tables是在tempdb中创建的。试试这个:

  • 我有一个约500000行45列的数据集。我想删除彼此重复的行,就像R“unique()”函数所做的那样(保留第一个匹配项,删除其余的),但是对于删除的每一行,我想存储保留的行与之相等的行。 我要用另一种方式说同样的话,因为我觉得这有点难以解释。对于数据集中的每一组相同行(称为S),我只希望在数据集中保留其中一行(称为保留的行K)。我想丢弃其他大小相同的行(称它们为D)。对于D中的每个元素,我想知道