如何在单列两行间为curr.course_enrolment_id赋值NULL?语法报错求助
语法错误修复方案
你的CASE语句存在两处核心语法问题,以下是具体修复思路和正确写法:
错误分析
- 缺少CASE语句的闭合关键字
END:CASE语句必须以END结尾,否则数据库无法识别语句边界。 - 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
相关产品推荐
相关产品推荐

