簡體   English   中英

在同一表上使用聚合子查詢的MySQL更新查詢

[英]MySQL update query that uses aggregation subquery on the same table

我有一個名為“ TableA”的表,其中包含“ customer_id”和“ name”字段。 我添加了一個新字段“ ref”。 現在,我想更新該表,以便將customer_id = 1的第一項的“ ref”字段設置為1001,customer_id = 1的第二項的“ ref”字段設置為1002,以此類推,並將customer_id = 2的第一項的值再次設置為1001等

當然,我已經得到了預期的mysql錯誤消息“您不能在FROM子句中指定目標表'TableA'進行更新”。

使用(SELECT next_ref FROM(SELECT ... WHERE A_sub。也試過customer_id = A. customer_id )AS A_sub),但那么MySQL說: “A. customer_id ”沒有找到。

這是查詢:

UPDATE TableA A
SET A.ref = (
    SELECT COALESCE(MAX(A_sub.ref) +1, 1001)
    FROM TableA A_sub
    WHERE A_sub.`customer_id` = A.`customer_id`
)
WHERE o.ref IS NULL;

問題是:這可以在一個查詢中完成還是必須使用臨時表? 謝謝您的幫助!

是。 您需要使用update / join

UPDATE TableA A join
       (SELECT A_sub.`customer_id`, COALESCE(MAX(A_sub.ref) +1, 1001) as newref
        FROM TableA A_sub
        GROUP BY A_sub.`customer_id`
       ) A_Sub
       on A_sub.`customer_id` = A.`customer_id`
  SET A.ref = newref
  WHERE a.ref IS NULL;

編輯:

如果您想要一個自動遞增的ID,建議您這樣定義一個。 如果必須放入一個,則可以執行以下操作:

UPDATE TableA A cross join
       (SELECT @rn := coalesce(MAX(A_sub.ref) + 1, 1001) as maxref
        FROM TableA A_sub
       ) vars
  SET A.ref = (@rn := @rn + 1)
  WHERE a.ref IS NULL;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM