MySQL多表關聯UPDATE操作
阿新 • • 發佈:2018-11-03
MySQL多表關聯UPDATE操作
多表關聯操作更新主表。
主表中個別欄位需要更新為另一張關聯表的某個欄位,例如a.app_uid要批量更新為b.uid,其中關聯的欄位為a.row_id=b.id
1.觀察需要更新的表comment結構
發現app_uid(被評論者的uid)為空值,但是可以查詢到這條資源的id,即row_id,我們需要把資源所有者的id更新到comment的app_uid中.
2.觀察關聯表resource結構
一個資源下有多條評論,比如資源id為4546 對應comment表中前三條row_id為4546的評論,
現在需要將此表中的uid填充到comment表中對應的app_uid中
3.SQL語句
UPDATE comment a INNER JOIN resource b ON a.row_id = b.id SET a.app_uid = b.uid WHERE b.uid IS NOT NULL AND a.row_id IN ( SELECT c.row_id FROM ( SELECT DISTINCT row_id FROM comment WHERE app_uid = 0 AND is_del = 0 AND is_audit = 1 AND `table` = 'resource' ) AS c )
執行結果
注:這裡查詢row_id需要一箇中間表c,否則msql會報以下錯誤
(無法將子查詢中的結果更新到目標表)
You can’t specify target table ‘表名’ for update in FROM clause