2011-05-01 93 views
1

我有一个MySQL表。如何根据三列删除部分重复项?将更改应用于当前表是否可行?如果不是解决方案是什么?如何从mysql表中删除部分重复项?

实施例:
的当前表
姓.........名字.......公司名称........职责.......专栏5 McKain ............... Christine ......... XYZ ..................... .......... A ................................ A
McKain ... ....... .... Christine ......... XYZ ............................ .B ............................... B
Morrell ............. Sally .............. ABC .............................. A。 .............................. A
Motu ................ ..Timothy ........... EFG ............................. I ..... ................. ..........我

结果表:

姓.........名.......公司名称...... ..责任....... Column 5 McKain ............... Christine ......... XYZ ........... ....................一个............................. ... A
Morrell ............... Sally .............. ABC ............ ..................一个 ............................... A
Motu .................. Timothy ........... EFG ............... .............. I ................................ I

如果可能的话有人p租赁告诉我一个简单的方法,在这里堆栈溢出添加表..

+0

你能举一个你的意思是部分重复的例子吗? – 2011-05-01 23:55:59

+1

如果三列的组合必须是唯一的以避免“部分重复” - 您应该将它们中的三个一起指定为唯一键(一旦您得到重复项出来..)需要示例给你一个问题的答案... – CarpeNoctumDC 2011-05-02 00:13:53

+0

我怀疑它将涉及导出,排序,重新导入和重新导入。 – staticsan 2011-05-02 00:53:11

回答

0

更换表名与表的名称和GROUP BY/UNIQUE索引字段你想成为唯一的字段。

警告:使用的GROUP BY将只在删除重复项时选择第一个条目。

如果出现问题,您仍然拥有tableName_old中原始数据的副本。

-- Create a new table that's filtered 
CREATE TABLE newTable 
    (SELECT * 
    FROM tableName 
    GROUP BY LastName, FirstName, Company); 

-- Add a unique index of the fields you want 
ALTER TABLE newTable ADD UNIQUE INDEX ix_unique (LastName, FirstName, Company); 

-- Rename the tables around 
RENAME TABLE tableName TO tableName_old; 
RENAME TABLE newTable TO tableName;