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

猜你喜欢

转载自blog.csdn.net/jsyandxys/article/details/83584410