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

从表中删除重复的行

郑锋
2023-03-14
问题内容

我的数据库中有一个表,其中有要删除的重复记录。我不想为此创建具有不同条目的新表。我想要的是从现有表中删除重复的条目,而无需创建任何新表。有什么办法吗?

 id           action
 L1_name      L1_data
 L2_name      L2_data
 L3_name      L3_data   
 L4_name      L4_data
 L5_name      L5_data
 L6_name      L6_data
 L7_name      L7_data
 L8_name      L8_data
 L9_name      L9_data
 L10_name     L10_data
 L11_name     L11_data
 L12_name     L12_data
 L13_name     L13_data 
 L14_name     L14_data
 L15_name     L15_data

看到这些都是我的字段:
id对于每一行都是唯一的。
L11_data对于相应的动作字段是唯一的。
L11_data具有公司名称,而动作具有行业名称。

因此,在我的数据中,我在L11_data中有各自行业的重复公司名称。

我要拥有的是存储在行动中的特定行业中公司的唯一名称和其他数据。我希望我已经以您能理解的方式陈述了我的问题。


问题答案:

是的,假设您具有唯一的ID字段,则可以删除除ID之外所有相同的记录,但是它们的值组没有“最小ID”。

查询示例:

DELETE FROM Table
WHERE ID NOT IN
(
SELECT MIN(ID)
FROM Table
GROUP BY Field1, Field2, Field3, ...
)

笔记:

  • 我自由选择“表格”和“ ID”作为代表名称
  • 字段列表(“ Field1,Field2,…”)应包括ID以外的所有字段
  • 这可能是一个缓慢的查询,具体取决于字段和行的数量,但是与其他方法相比,我希望它可以

编辑:如果您没有唯一索引,我的建议是简单地添加一个自动递增的唯一索引。主要是因为它的设计很好,还因为它可以让您运行上面的查询。



 类似资料:
  • 问题内容: 我在PostgreSQL 8.3.8数据库中有一个表,该表上没有键/约束,并且有多个行,它们的值完全相同。 我想删除所有重复项,并且每行仅保留1个副本。 特别是有一列(称为“密钥”)可用于标识重复项,即,每个不同的“密钥”应该只存在一个条目。 我怎样才能做到这一点?(理想情况下,使用单个SQL命令。) 在这种情况下,速度不是问题(只有几行)。 问题答案:

  • 问题内容: 数据库类型为PostGres 8.3。 如果我写了: 我有一些计数超过1的行。如何取出重复的行(我仍然希望每个行都保留1行,而不是+1行…我不想删除所有行。) 例子: 应该变成: 我找到的唯一答案是 在那里,但是我想知道是否可以在没有哈希列的情况下做到这一点。 警告 我没有具有唯一编号的PK,因此无法使用min(…)技术。PK是3个字段。 问题答案: 这是所有表都应具有主键的众多原因之

  • 问题内容: 我正在Oracle中进行测试,并在表中填充了一些示例数据,但是在此过程中,我不小心加载了重复的记录,因此现在无法使用某些列创建主键。 如何删除所有重复的行并仅保留其中之一? 问题答案: 使用伪列。 其中,和组成每个记录的标识键。您可能会列出所有列。

  • 问题内容: 我有一张像这样的桌子: ID为 ,自创建表以来一直在使用。 我想要做的是删除除一个记录以外的所有记录,其中所有其他列都相同。 问题答案: 当然,您必须在所有三个位置将col1,col2扩展到所有列。 编辑:我只是从保留的脚本中重新进行了测试,然后重新测试,它在MySQL中执行。

  • 问题内容: 我想从排序的链表{0 1 2 2 3 3 4 5}中删除重复项。 ` ` prev.setNext(tempHeader)在while循环内无法正常工作。理想情况下,当prev = 2且tempHeader = 3时,prev.next应该是data = 3的节点。 Printlist函数仅使用标题指针并打印列表。 节点定义如下。 问题答案: 循环已排序,因此您知道重复项将彼此相邻。如

  • 我下面有一个类,想删除包含同名的重复人,如何使用Java8 Lambda,预计列表包含下面的p1、p3。