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