0

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

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

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

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 列是相同的。

4

2 回答 2

0

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

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

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

于 2013-06-18T17:35:47.527 回答
0

下面是一个如何通过创建新表来删除表中重复行的示例。假设您的原始表名(带有重复项)是tbl,在运行此查询后,您应该在数据库中得到两个表:tbl即没有重复项的新表,tbl_old即原始表(刚刚重命名):

CREATE TABLE tbl_unique LIKE tbl;
  ALTER TABLE tbl_unique
  ADD UNIQUE KEY unkey(C1,C3);

INSERT IGNORE INTO tbl_unique
  SELECT * FROM tbl;

ALTER TABLE tbl RENAME tbl_old;
ALTER TABLE tbl_unique RENAME tbl;

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

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

于 2013-06-18T22:52:43.837 回答