需要帮助更新MySQL中具有重复值的记录



我有一个mysql表,表示通过一个复杂的同步过程从rest api同步到我的数据库的订单-由于一个错误,我现在有重复的订单,我对mysql不够熟悉,无法正确修复这个问题-我很想避免我自己可以做的"php方式"。

我的表中的重复记录有一个具有相同订单id的特定列,还有一个名为"record_state"的列,表示记录的状态(1=最新记录,2=较旧记录(我知道如何用以下语句查找重复项:

SELECT 
orderid, 
COUNT(orderid)
FROM
orders
WHERE `time_get` > 1584226800 AND `system` = 'live' and `record_state` = 1 and `hidden` = 0 AND `deleted` = 0
GROUP BY orderid
HAVING COUNT(orderid) > 1

我现在需要做的是更新这些结果的任何旧副本(例如count(orderid(=2(。我有一个时间栏,可以用来比较它们。对我来说,主要目标是只有最新的订单的record_state=1,旧的重复订单的record_state=2。我很乐意得到任何帮助——这是我公司的现场制作台,所以我绝对不能搞砸。提前感谢Oliver

UPDATE orders o1
SET o1.record_state = 2
WHERE ( all conditions except record_state ) 
AND o1.record_state != 2
AND EXISTS ( SELECT NULL
FROM orders o2
WHERE o1.orderid = o2.orderid
AND o1.time_get < o2.time_get
AND o2.record_state = 1 )

即,如果存在具有相同orderidrecord_state = 1的最近记录,则我们使用record_state != 2更新所有记录。


mysql表示:不允许在FROM子句部分使用o1

如果是,请尝试

UPDATE orders o1, orders o2
SET o1.record_state = 2
WHERE ( all conditions except record_state by o1 ) 
AND o1.record_state != 2
AND o1.orderid = o2.orderid
AND o1.time_get < o2.time_get
AND o2.record_state = 1;

最新更新