1. 程式人生 > >MySQL多表關聯UPDATE操作

MySQL多表關聯UPDATE操作

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