2016-12-02 133 views
1

我想实现的是以下内容:更新现有的表,其中每行有字段“order-id”(从0开始依次递增)。现在,如果一行被删除,我想确保“order-id”的一致性,即从0开始,加1。 示例:行号为order-id 0,1,2,3 - 然后是带有order-id的行“2”被删除。我要寻找的SQL语句,使确认订单是不是“0,1,3”,而是“0,1,2”由现有的订单ID(因此要想在subequery BY)下令MySQL的条件更新与子查询

这里是我到目前为止 - 的作品,但并不需要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" 

回答

0

,如果你将其转换为update-join构造是什么样的

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

不幸的是,它不会做什么它需要: 下面是一些样本数据: ROW 1:“walk_id 1059, ORDER_ID 0, walklist 8" , 第2行: “walk_id 821, ORDER_ID 399, walklist 8”, 第2行: “walk_id 91, ORDER_ID 45, walklist 8” 运行查询后,这看起来应该像 第1行: “walk_id 1059, ORDER_ID 0, walklist 8" , ROW 2: “walk_id 91, ORDER_ID 1, walklist 8”, ROW 2: “walk_id 821, ORDER_ID 2, walklist 8” – Patrik