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

使用CTE交换表两列数据报no such column错误,求正确SQL写法

问题原因与正确SQL写法

你遇到的报错是因为UPDATE语句仅定义了CTE但没有将其与目标表SalComm关联,数据库无法识别cte.comm1等字段归属。


基于CTE的正确写法

适用MySQL、PostgreSQL、SQLite 3.33及以上版本(支持UPDATE JOIN语法)

WITH CTE AS (
    SELECT ID AS id1, sal AS sal1, comm AS comm1 FROM SalComm
)
UPDATE SalComm
JOIN CTE ON SalComm.ID = CTE.id1
SET sal = CTE.comm1, comm = CTE.sal1;

适用SQL Server、Oracle等支持UPDATE FROM语法的数据库

WITH CTE AS (
    SELECT ID AS id1, sal AS sal1, comm AS comm1 FROM SalComm
)
UPDATE SalComm
SET sal = CTE.comm1, comm = CTE.sal1
FROM SalComm
INNER JOIN CTE ON SalComm.ID = CTE.id1;

更简洁的无CTE写法

如果你不需要强制使用CTE,标准SQL下可以直接用下面的语句实现两列值交换。SQL的UPDATE机制会先计算所有赋值表达式右侧的原始值再统一写入,不会出现值覆盖的问题:

UPDATE SalComm
SET sal = comm, comm = sal;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 15:15:02