2015-10-29 180 views
2

我需要根據非重複字段刪除一些重複數據。基於非重複字段從表中刪除重複項

樣本數據:

|status|Size|id# |income|scan_date | 
| 0 | 3 |123456| 1000 |2015-10-16| 
| 1 | 3 |123456| 1000 |2015-10-16| 
| 1 | 4 |112345| 900 |2015-09-05| 
| 0 | 7 |122345| 700 |2015-10-01| 

當ID#和scan_date都是一樣的,我需要刪除只有在狀態爲「0」的行。

回答

2
delete from table 
where status=0 
and (id, scan_date) in 
(select id, scan_date from 
(select id, scan_date from table 
group by id, scan_date 
having count(*) >=2) t1) 

您需要在mysql中額外的子查詢,因爲mysql不允許從正在更新或刪除的表中進行選擇。

更新:請參閱this sqlfiddle我創建。我認爲你用t1別名刪除了子查詢,儘管我明確地告誡你說它很重要!

+0

當我嘗試用實際表名替換'table'時出現以下錯誤:「您無法在FROM子句中指定目標表'stdnt_data_copy'進行更新」 – jvan

+0

您是否包含帶有t1別名的附加子查詢? – Shadow

+0

我沒有包含帶有t1別名的子查詢。我查看了服務器上運行的mysql版本,實際上它很老,4.1.22。這可能是問題的一部分嗎? – jvan