2015-10-29 125 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