2011-05-01 70 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;