2014-03-12 82 views
0

我這裏重複的行存在,應該被刪除的表離開了重複的行留下最小行的表中刪除重複記錄

EMP表具有唯一約束,其中包括姓名,年齡,性別的一個

下面的查詢工作正常

SELECT MIN(emp_no) 
    FROM emp 
    GROUP BY name, age, sex 
    HAVING COUNT(1) > 1 INTO @emp_duplicate_ids; 

    DELETE FROM emp 
    WHERE emp_no NOT IN(@emp_duplicate_ids); 

是否有任何其他短的路還是最好的辦法實現這一目標?

感謝

回答

0

試試這個(測試DB不生產)

DELETE e FROM emp e 
JOIN (SELECT MIN(emp_no) AS emp_no FROM emp GROUP BY name, age, sex) f 
ON e.name=f.name and e.age =f.age and e.sex=f.sex and e.emp_no <> f.emp_no 
+0

可否請您檢查查詢,它並不如預期的工作?拋出錯誤:在'子句'上的未知列'f.emp_no' – user2323036

+0

編輯解決方案,再試一次。 – har2vey

+0

同樣的錯誤,我正在使用MySQL數據庫...請檢查在sqlfiddle.com查詢是否適用於您.. – user2323036