首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在雅典娜中正确使用sql 'case when‘

如何在雅典娜中正确使用sql 'case when‘
EN

Stack Overflow用户
提问于 2020-11-12 20:05:50
回答 2查看 97关注 0票数 0
代码语言:javascript
复制
select  
 (case "plm"."event" when ('newMessage' and plm.id == vm.id) then 'VoiceMessgae' else plm."event" end) as "event"
   FROM 
   others_messages plm
   left join voice_messages vm on plm.id = vm.id

它在输入'(case "plm"."event“when ) ('newMessage‘和plm.id ==’)时没有显示可行的替代方案

我怎么才能修复它呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-12 20:07:28

为了在语法上正确,case表达式应该是:

代码语言:javascript
复制
select (case when "plm"."event" = 'newMessage' and plm.id = vm.id
             then 'VoiceMessgae'
             else plm."event"
        end) as "event" 

case提供了两种语法。如果有复杂的表达式,则需要使用搜索到的case,其中布尔表达式跟在when之后。

票数 0
EN

Stack Overflow用户

发布于 2020-11-12 20:07:59

我认为你想要:

代码语言:javascript
复制
select
    case when "plm"."event" = 'newMessage' and vm.id is not nulll
        then 'VoiceMessgae' 
        else plm."event" 
    end as "event" 
from others_messages plm 
left join voice_messages vm on plm.id = vm.id

您不需要在case条件中执行相等性检查- left join已经执行了。只需确保left joined表中的id不是null (换句话说:left join中存在匹配)。

如果发现使用exists可能比使用left join更清楚地表达逻辑

代码语言:javascript
复制
select
    case when "plm"."event" = 'newMessage' and exists (select 1 from voice_messages vm where plm.id = vm.id)
        then 'VoiceMessgae' 
        else plm."event" 
    end as "event" 
from others_messages plm 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64803615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档