2012-03-09 73 views
0

我有一個MySQL表是這樣的:刪除重複的排在MySQL

id employee_number name 
    1  1    A 
    2  2    B 
    3  3    C 
    4  3    C 
    5  4    D 
    6  5    E 
    7  5    E    
    8  6    F 
    9  7    G 
    8  8    H 
    9  9    I 
    10  ....  
    11  .... 
    12  .... 
     many duplicated 
     employee_number 

我想刪除1行EMPLOYEE_NUMBER 3和5(ID 3或4和6或7並不重要)的。 我可以看到與下面的SQL重複的行,但不知道下一步該怎麼做。我喜歡有人能幫我解決這個問題。非常感謝!

SELECT COUNT(id) , employee_number 
FROM `employees` 
GROUP BY employee_number 

更新:

CREATE TABLE NEW_TABLE作爲 SELECT * FROM OLD_TABLE WHERE 1 GROUP BY EMPLOYEE_NUMBER;

好吧。我發現這個聲明,它的工作原理。多謝你們。

+2

在你可以刪除任何你需要決定行保留的標準之前,記住你會丟掉一些數據。 – 2012-03-09 03:25:36

+0

我已經找到解決方案。請參閱更新。 – FlyingCat 2012-03-09 03:45:38

+0

你是否upvoting每個人甚至沒有檢查如果答案的工作,我想我應該在帖子上發佈更多的答案 – 2012-03-09 07:15:58

回答

1
DELETE FROM `employees` 
WHERE ID 
NOT IN 
(SELECT MAX(B.ID) FROM 
        (SELECT employee_number 
        FROM `employees` 
        GROUP BY employee_number 
        HAVING COUNT(*)>1) A, 
        `employees` B 
WHERE A.employee_number=B.employee_number 
GROUP BY B.employee_number 
); 
+0

謝謝Venk。我已經找到了解決方案。 +1 – FlyingCat 2012-03-09 03:44:41

+0

我的榮幸傑裏... :) – Teja 2012-03-09 03:45:29

1

ü可以使用這樣的SQL(在Oracle): 查詢重複行 SELECT * FROM僱員T1其中t1.rowid>(SELECT MIN(t2.rowid)FROM僱員T 2,其中t2.name = t1時。名稱) ;

刪除v員工t1其中t1.rowid>(從僱員t2選擇min(t2.rowid)t2其中t2.no = t1.no);

+0

感謝RookieCy。我已經找到了解決方案。 +1 – FlyingCat 2012-03-09 03:44:23

0

你可以自己加入表格。

說不要刪除相同的記錄。即(NOT Employee.id = vtable.id)

如果不是相同的記錄,並且employee_number匹配,則刪除。

delete from Employee 
USING Employee, Employeeas vtable 
WHERE (NOT Employee.id=vtable.id) 
AND (Employee.employee_number=vtable.employee_number)