PostgreSQL中CASE WHEN转含ELSE IF的IF THEN语句报错求助
解决PostgreSQL中SELECT语句的多分支逻辑语法问题
嗨,我来帮你搞定这个问题!
你遇到的报错是因为PostgreSQL的普通SELECT查询语句不支持直接使用IF THEN END IF这种PL/pgSQL控制结构——这种IF语法是用于存储过程、自定义函数等PL/pgSQL代码块里的,不能直接放在SELECT的字段定义中。
要实现多分支的ELSE IF逻辑,你只需要扩展原来的CASE WHEN语句就可以了,这才是SQL查询中实现条件分支的标准写法。
正确的多分支CASE WHEN写法
假设你要新增一个ELSE IF条件(比如当col1等于'OTHER'时返回col3),可以这么写:
SELECT CASE WHEN ab.col1 = 'NULL' THEN ab.col2 -- 第一个条件 WHEN ab.col1 = 'OTHER' THEN ab.col3 -- 这里对应你要加的ELSE IF逻辑 ELSE ab.col1 -- 所有条件都不满足时的默认值 END AS col FROM table1 AS ab;
额外提醒:注意区分字符串'NULL'和SQL NULL值
如果你的col1字段里存储的是真正的SQL NULL值(不是字符串'NULL'),那判断条件应该改成ab.col1 IS NULL,而不是ab.col1 = 'NULL'——因为后者只是判断字段值等于字符串'NULL',和SQL的空值是完全不同的概念。比如:
SELECT CASE WHEN ab.col1 IS NULL THEN ab.col2 WHEN ab.col1 = 'OTHER' THEN ab.col3 ELSE ab.col1 END AS col FROM table1 AS ab;
内容的提问来源于stack exchange,提问作者S.Perera
相关产品推荐
相关产品推荐

