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

我有一个mysql-表,代表的订单正在同步到我的数据库通过一个复杂的同步过程从休息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)。我有一个时间列,我可以用它来比较它们。我的主要目标是只有最新的订单有一个记录_状态=1,旧的重复应得到记录_状态=2.我很高兴得到任何帮助 – 这是一个实时生产表我的公司,所以我绝对不能搞砸了。

解决方案:

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 )

即,我们更新所有记录 record_state != 2 如果存在较新的相同记录 orderidrecord_state = 1.


mysql说:在FROM-clause部分不允许使用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;

给TA打赏
共{{data.count}}人
人已打赏
未分类

如何在R中去掉变量中的括号?

2022-9-9 1:06:24

未分类

用Java搜索excel文档的算法

2022-9-9 1:17:16

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索