我今天去接受采访,他们给了我关于sql的技术测试。其中之一是如何在没有主键的情况下删除重复记录。
对于一个我无法想象没有主键的表。是的我已经阅读了现有的线程。说这发生了,现在需要修复。我不能只是在表格的末尾添加一个自动递增的ID然后用它来删除重复的记录吗?
任何人都可以想到为什么这不起作用的原因?我在我创建的一个简单数据库上尝试过,但我看不出任何问题
答案 0 :(得分:1)
如何执行此操作的可能选项之一:
但这在生产中并不总是可行的
答案 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]