咨询Postgres中CASE表达式特定语句的具体含义
CASE语句片段含义解析
先看你给出的完整WHERE子句代码:
where case when o.tracking_id <> '0' then a.account_id is null and o.status = 'N' else ( o.tracking_id = '0' and o.status = 'N' ) END
你疑惑的case when o.tracking_id <> '0' then a.account_id is null这行,结合上下文的完整逻辑是:
当o.tracking_id的值**不等于'0'**时,需要同时满足两个条件才会让这条数据被筛选出来:
a.account_id字段的值是NULL;o.status字段的值等于'N'。
而整个WHERE子句的过滤规则可以直白翻译为:
只要满足以下两种情况中的任意一种,数据就会被选中:
- 情况1:
o.tracking_id≠'0',且a.account_id是NULL,且o.status='N'; - 情况2:
o.tracking_id='0',且o.status='N'。
另外,这个CASE写法其实可以改写成更直观的逻辑组合,可读性更强:
WHERE o.status = 'N' AND ( (o.tracking_id <> '0' AND a.account_id IS NULL) OR o.tracking_id = '0' )
内容的提问来源于stack exchange,提问作者user19471184
相关产品推荐
相关产品推荐

