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

如何在单列两行间为curr.course_enrolment_id赋值NULL?语法报错求助

语法错误修复方案

你的CASE语句存在两处核心语法问题,以下是具体修复思路和正确写法:

错误分析

  1. 缺少CASE语句的闭合关键字END:CASE语句必须以END结尾,否则数据库无法识别语句边界。
  2. THEN子句逻辑混乱:你试图在THEN后混合条件判断与赋值操作,这不符合CASE语法规则——THEN后应直接返回目标值(此处为NULL),而非嵌套条件判断。

正确写法(按需求场景分)

场景1:SELECT中返回NULL(替换原字段值)

如果是在查询时,满足条件就将curr.course_enrolment_id显示为NULL,否则保留原值:

SELECT
    -- 其他字段
    CASE 
        WHEN curr.unit_start_tp LIKE '%QT%' AND prev.unit_start_tp LIKE '%TP%' 
        THEN NULL  -- 满足条件时设为NULL
        ELSE curr.course_enrolment_id  -- 不满足则保留原字段值
    END AS course_enrolment_id
FROM your_table curr
-- 需添加与prev表的关联逻辑,比如JOIN your_table prev ON ...

场景2:UPDATE中设置字段为NULL

如果是要更新表数据,满足条件时将curr.course_enrolment_id设为NULL:

UPDATE your_table curr
SET course_enrolment_id = NULL
WHERE EXISTS (
    SELECT 1 
    FROM your_table prev
    -- 需添加curr和prev的行关联条件,比如curr.id = prev.id + 1 之类的逻辑
    WHERE curr.unit_start_tp LIKE '%QT%' AND prev.unit_start_tp LIKE '%TP%'
)

补充说明

如果你的实际需求是当curr.course_enrolment_id处于两个值之间时设为NULL,可调整CASE的条件:

CASE 
    WHEN curr.unit_start_tp LIKE '%QT%' 
         AND prev.unit_start_tp LIKE '%TP%'
         AND curr.course_enrolment_id BETWEEN curr.unit_start_tp AND prev.unit_start_tp
    THEN NULL
    ELSE curr.course_enrolment_id
END AS course_enrolment_id

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:25:28