PostgreSQL 错误:CASE 中不允许设置返回函数

Posted

技术标签:

【中文标题】PostgreSQL 错误:CASE 中不允许设置返回函数【英文标题】:PostgreSQL error: set-returning functions are not allowed in CASE 【发布时间】:2017-11-30 13:11:15 【问题描述】:

我尝试在 PostgreSQL 10 中运行此查询:

select e.errordescription,
       CASE 
        WHEN e.reworkempid is not null THEN get_empname(e.reworkempid) 
        else null 
      end  
from error_log_gs  e 
where e.qcworkpackageid=3012175 and e.logno=1 

得到错误:

CASE 中不允许设置返回函数

【问题讨论】:

案例表达式,不是语句。 错误对我来说似乎很清楚,你的问题是什么? 实际上这个问题是不言而喻的,比神秘的错误信息更重要。 不清楚为什么 CASE 在其他用例中返回一个集合,而在其他用例中它似乎是逐行操作(例如,您在搜索中遇到的每个 CASE 教程)。幸运的是@linoff 明白这一点。 【参考方案1】:

改用lateral join

select e.errordescription, ge.name
from error_log_gs e left join lateral
     get_empname(e.reworkempid) ge(name)
     on e.reworkempid is not null
where e.qcworkpackageid = 3012175 and e.logno = 1 ;

【讨论】:

以上是关于PostgreSQL 错误:CASE 中不允许设置返回函数的主要内容,如果未能解决你的问题,请参考以下文章

使用 Postgres 11 时,UPDATE 中不允许设置返回函数

错误:PostgreSQL 中不存在列

为啥 case 语句不允许我设置将在方法中使用的变量

postgreSQL 中不存在函数.. 为啥?

PostgreSQL INSERT INTO SELECT CASE 问题

启用允许任意加载应用程序传输安全设置在 XCODE 9.2 和 iOS 11.2 中不起作用