Mysql 查找重复项以准备两列主键
我一直在使用两列主键,但我刚刚发现第二列(第2列)的值映射到同一个项,从而导致重复 我已经创建了一个新列(第3列),我想从中创建一个两列主键。我需要通过删除重复的行项目为新主键准备数据库 我正在寻找一个可以隔离重复列的查询:例如,列1和列3都是重复的。例如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
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;