带有子查询的MySQL条件UPDATE

时间:2016-12-02 13:45:21

标签: mysql sql subquery

我想要实现的目标如下:更新现有的表,其中每行都有字段" order-id" (从0开始按顺序递增)。现在,如果删除了一行,我想确保" order-id"的一致性,即从0开始,增加1。 示例:订单ID为0,1,2,3的行 - 然后是订单ID" 2"被删除。我正在寻找确保订单不是" 0,1,3"的SQL语句,但是" 0,1,2"由现有的order-id排序(因此子查询中的ORDER BY)

这是我到目前为止所做的工作,但由于某种原因没有考虑ORDER BY

UPDATE walklist_walks AS w, 
   (SELECT walk_id, order_id,@n := -1 
   FROM walklist_walks 
   WHERE walklist=8 
   ORDER BY order_id ASC) m
SET w.order_id = @n := @n + 1
WHERE w.walklist = 8 
AND w.walk_id=m.walk_id

以下是一些示例数据:

   ROW 1: "walk_id 1059, order_id 0, walklist 8", 
   ROW 2: "walk_id 821, order_id 399, walklist 8", 
   ROW 3: "walk_id 91, order_id 45, walklist 8" 

运行查询后,这应该看起来像

   ROW 1: "walk_id 1059, order_id 0, walklist 8", 
   ROW 2: "walk_id 91, order_id 1, walklist 8", 
   ROW 3: "walk_id 821, order_id 2, walklist 8"

1 个答案:

答案 0 :(得分:0)

如果将其转换为{/ 1}}结构(如

),该怎么办?
update-join