Php 检查重复行并更新状态,保持第一个数据不变
我的表格示例:Php 检查重复行并更新状态,保持第一个数据不变,php,mysql,duplicates,Php,Mysql,Duplicates,我的表格示例: Table_1 +-----id-----+-----zone-----+-----address-----+-----status-----+ =============+==============+=================+================+ 1 5 10 ok 2 2 8
Table_1
+-----id-----+-----zone-----+-----address-----+-----status-----+
=============+==============+=================+================+
1 5 10 ok
2 2 8 ok
3 3 2 ok
4 2 5 ok
5 3 2 ok
6 5 10 ok
7 3 2 ok
我需要检查重复条目[zone/address Composition],并将表格如下所示:
Table_1
+-----id-----+-----zone-----+-----address-----+-----status-----+
=============+==============+=================+================+
1 5 10 ok
2 2 8 ok
3 3 2 ok
4 2 5 ok
5 3 2 duplicate
6 5 10 duplicate
7 3 2 duplicate
查询应检查区域、地址的重复组合,并应更新“状态”列。
我需要保持第一个重复数据状态不变,其余重复数据应标记为“重复”
关于如何做到这一点有什么想法吗?我还没有测试过它,但类似的东西应该可以工作
update table_1 set status = 'duplicate'
where exists
select 1 from table_1 t
where id != t.id
and zone = t.zone
and address = t.address
and t.status = 'ok'
你可以分两步来做
# set all duplicate rows as "duplicate"
UPDATE Table_1 t1,(SELECT DISTINCT _t1.id,_t1.zone,_t1.address
FROM Table_1 _t1
INNER JOIN Table_1 _t2
ON (_t1.address= _t2.address AND _t1.zone = _t2.zone AND _t1.id != _t2.id)
) t2
SET t1.status = 'duplicate' WHERE t2.id = t1.id;
及
你可以用这个:
update
Table_1 t1 inner join Table_1 t2
on t1.zone=t2.zone
and t1.address=t2.address
and t1.id>t2.id
set t1.status='duplicate'
update
Table_1 t1 inner join Table_1 t2
on t1.zone=t2.zone
and t1.address=t2.address
and t1.id>t2.id
set t1.status='duplicate'