Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 查找重复项以准备两列主键_Mysql_Duplicates - Fatal编程技术网

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

Mysql 查找重复项以准备两列主键,mysql,duplicates,Mysql,Duplicates,我一直在使用两列主键,但我刚刚发现第二列(第2列)的值映射到同一个项,从而导致重复 我已经创建了一个新列(第3列),我想从中创建一个两列主键。我需要通过删除重复的行项目为新主键准备数据库 我正在寻找一个可以隔离重复列的查询:例如,列1和列3都是重复的。例如 Column 1 Column 2 Column 3 Remove? 1 a x n 1 b x y 2

我一直在使用两列主键,但我刚刚发现第二列(第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列是相同的。

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

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

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

下面是一个如何通过创建新表删除表中重复行的示例。假设原始表名(包含重复项)为
tbl
,运行此查询后,您的数据库中应该会有两个表:
tbl
,即没有重复项的新表,以及
tbl\u 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;