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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值