查找重复项以准备两列主键

时间:2013-06-18 17:22:58

标签: mysql duplicates

我一直在使用双列主键,但我刚发现第二列(第2列)的值映射到导致重复的同一项目。

我创建了一个新列(第3列),我想从中创建一个双列主键。我需要通过删除重复的行项目为新主键准备数据库。

我正在寻找可以隔离重复列的查询:例如第1列和第3列都是重复的。 E.g。

Column 1   Column 2   Column 3   Remove?
1          a          x          n
1          b          x          y
2          b          y          n
3          c          z          n
3          d          z          y
3          e          z          y
4          f          x          n

请注意,我保留哪个列值并不重要,因为它们是等效的,第3列是相同的。

2 个答案:

答案 0 :(得分:0)

你可以通过对你的键列进行分组,并在其他列上使用MIN()或MAX()来提取你想要保留的数据[因为你说你不关心你保留哪个值,来自第2栏]。

Select Column1, Column3, MAX(Column2) As Column2
from Table1
Group By  Column1, Column2

将其放入临时表中,然后从原始表中删除所有记录,并替换为临时表中的所有内容。

答案 1 :(得分:0)

以下是如何通过创建新表来删除表中重复行的示例。假设您的原始表名(带有重复项)是tbl,您应该在运行此查询后最终在数据库中使用两个表:tbl这是没有重复项的新表,{{1这是原始表(刚重命名):

tbl_old

实施例: http://sqlfiddle.com/#!2/da167/1/0

来源: https://dba.stackexchange.com/questions/9602/deleting-duplicates-with-group-by-and-count