mysql - 如何更新 mysql 中的多行?

标签 mysql mysql-5.7

我有一个餐 table 教练。表教练有这样的数据:

enter image description here

我想更新player_id列,使数据如下所示:

enter image description here

类型 =“coach”的 Player_id 值取自类型 =“player”的 id 值。根据字段信息中的值player_code与字段code的关系得出

我尝试使用查询自连接进行更新,如下所示:

UPDATE coach
SET player_id = (
            SELECT b.id
            FROM coach a
            LEFT JOIN coach b ON REPLACE(JSON_EXTRACT(b.information, "$.player_code"), '"', '') = b.code
            WHERE b.`type` = 'player'
          )
WHERE `type` = 'coach'

执行查询时,存在如下错误:

Error Code: 1093
You can't specify target table 'coach' for update in FROM clause

有谁可以帮助我吗?

最佳答案

update coach as c1
inner join (
    select b.id,
        b.code
    from coach b
    where b.`type` = 'player'
    ) as c2 on REPLACE(JSON_EXTRACT(c1.information, '$.player_code'), '"', '') = c2.code

set c1.player_id = c2.id
where c1.type = 'coach';

关于mysql - 如何更新 mysql 中的多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41407397/

相关文章:

PHP:脚本导入 csv 数据时出现解析错误

mysql 更新错误 1054 : Unknown column 'x' in 'field list'

MySQL JSON_OBJECT 而不是 GROUP_CONCAT

mysql - 按相邻时间值分组

mysql - Laravel MySQL JSON LIKE 查询

SQL - 按行对排序

mysql - 使用 MySql 选择记录范围

mysql - 是否可以使用不同 Excel 工作表中的数据将数据附加到数据库文件?

php - 如何使此代码按日期排序?

mysql - 从搜索记录中获取搜索次数最多的术语,忽略任何用户在给定时间范围(小时)内对搜索术语的任何重复条目