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

如何将SELECT语句生成的奇偶判断结果更新至对应列?

解决EvenRodd表UPDATE语句的问题

嘿,我来帮你排查这个UPDATE语句的问题~你的代码里主要有两个小错误导致执行失败:

  • 子查询返回了多余的列:你在SET的子查询里同时选了evenrodd.nrow和CASE的结果,但e_and_o只需要CASE生成的'Odd'/'Even'值,多列返回会让数据库无法识别要赋值的内容。
  • 子查询未关联当前更新行:这个子查询会返回整个表的所有行结果,数据库没法对应到当前正在更新的那一行,会触发「单行子查询返回多行」的错误。

正确的写法(最简洁高效版)

其实完全不需要嵌套子查询,直接把你SELECT语句里的CASE逻辑搬到UPDATE的SET里就行:

UPDATE evenrodd 
SET e_and_o = CASE
    WHEN MOD(nrow, 2) != 0 THEN 'Odd'
    WHEN MOD(nrow, 2) = 0 THEN 'Even'
END
WHERE e_and_o IS NULL;

关联子查询版(如果需要用子查询的情况)

要是你一定要用子查询实现,得给子查询加上关联条件,确保它只返回当前更新行的计算结果:

UPDATE evenrodd t1
SET e_and_o = (
    SELECT CASE
        WHEN MOD(t2.nrow, 2) != 0 THEN 'Odd'
        WHEN MOD(t2.nrow, 2) = 0 THEN 'Even'
    END
    FROM evenrodd t2
    WHERE t2.nrow = t1.nrow -- 关联当前要更新的行
)
WHERE e_and_o IS NULL;

第一种写法直接对每一行计算奇偶性结果,性能更好也更易读,推荐用这个~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 16:30:35