2016-12-02 135 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