如何在不使用主键的情况下删除重复记录

时间:2014-07-04 17:31:25

标签: sql sql-server

我今天去接受采访,他们给了我关于sql的技术测试。其中之一是如何在没有主键的情况下删除重复记录。

对于一个我无法想象没有主键的表。是的我已经阅读了现有的线程。说这发生了,现在需要修复。我不能只是在表格的末尾添加一个自动递增的ID然后用它来删除重复的记录吗?

任何人都可以想到为什么这不起作用的原因?我在我创建的一个简单数据库上尝试过,但我看不出任何问题

2 个答案:

答案 0 :(得分:1)

如何执行此操作的可能选项之一:

  1. 从您的表中选择不同的行(您可以使用所有列的组来实现此目的)
  2. 将结果插入新表格
  3. 放第一张表
  4. 将第二个表改为第一个名称
  5. 但这在生产中并不总是可行的

答案 1 :(得分:1)

你在这里有几个选择。

如果他们不介意你丢弃表格,可以从相关表格中SELECT DISTINCT *然后INSERT将其放入新表格中DROP ping旧表。这显然不能在生产数据库中使用,但对于某人填充例如填充数据仓库的例程可能很有用。

或者,您可以根据this answer使用行号有效地创建临时索引。那个答案向你展示了如何在SQL服务器中使用内置的row_number()函数,但是可以通过声明一个名为@row_num的变量或等效的函数来复制到其他RDBMS中(当然不确定哪个是MySQL)它在您的SELECT声明中为:

SET @row_num=0;
SELECT @row_num:=@row_num+1 AS row_num, [REMAINING COLUMNS GO HERE]