[英]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.