You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL如何使用临时表字段更新bms_title表的thumbnail列

错误原因

你的两次写法报错的核心原因是:UPDATE语句中没有将目标表bms_title和临时表temporary_table做关联,数据库无法识别WHERE条件中引用的temporary_table对象。

解决方案

有两种可用的实现方式:

方案1:基于临时表关联更新

你创建临时表的逻辑没有问题,只需要修改UPDATE语句,将两个表做关联即可:

-- 原有创建临时表的逻辑保持不变
CREATE TEMPORARY TABLE IF NOT EXISTS temporary_table AS (
    SELECT DISTINCT 
        t.id, 
        t.title as Textbook,
        GROUP_CONCAT(CONCAT(ci.discipline_code, ci.code, " (" , ci.type , ")") SEPARATOR ', ') as CourseCode 
    FROM tms_local.bms_material m
    JOIN tms_local.bms_title t ON t.id = m.book_id 
    JOIN tms_local.bms_course c ON c.id = m.course_id 
    JOIN tms_local.bms_courseinfo ci ON ci.id = c.id
    WHERE t.id > 1 
      AND isbn != 'NA'
    GROUP BY t.id, t.title
);

-- 修正后的关联更新语句
UPDATE tms_local.bms_title bt
INNER JOIN temporary_table tt ON bt.title = tt.Textbook
SET bt.thumbnail = tt.CourseCode;

方案2:直接多表更新(无需单独创建临时表)

可以直接把你的聚合查询逻辑作为子查询,和目标表关联后直接更新,写法更简洁:

UPDATE tms_local.bms_title bt
INNER JOIN (
    SELECT DISTINCT 
        t.id, 
        t.title as Textbook,
        GROUP_CONCAT(CONCAT(ci.discipline_code, ci.code, " (" , ci.type , ")") SEPARATOR ', ') as CourseCode 
    FROM tms_local.bms_material m
    JOIN tms_local.bms_title t ON t.id = m.book_id 
    JOIN tms_local.bms_course c ON c.id = m.course_id 
    JOIN tms_local.bms_courseinfo ci ON ci.id = c.id
    WHERE t.id > 1 
      AND isbn != 'NA'
    GROUP BY t.id, t.title
) tt ON bt.title = tt.Textbook
SET bt.thumbnail = tt.CourseCode;
注意事项

如果bms_title表的title字段存在重复值,建议使用子查询中已经拿到的t.id作为关联条件(关联语句改为ON bt.id = tt.id),避免重复标题导致错误更新。

内容的提问来源于stack exchange,提问作者django

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 18:03:03