CASE语句中子查询失效,所有行均返回Else结果排查
问题分析与解决方案
原查询所有行返回not alpha的原因主要有两点:
未限定目标行类型
需求仅针对type = 'BETAKEY'的行进行判断,但原CASE条件里没有这个限定,反而错误地用contract = 'fe39f0499bf040f351f2e0c3f2c1ae81ea612c48'作为判断前提,导致不符合该contract的BETAKEY行无法触发alpha结果,同时非BETAKEY行也被错误纳入判断逻辑。子查询的多余contract限制
子查询中额外添加了contract = '1f469d53942358b1754aa314548ee85cec3d2089'条件,若某个sender的ALPHAKEY记录对应的contract不是该值,子查询将无法匹配到数据,导致IN条件不成立,最终返回not alpha。
修正后的SQL
SELECT type, sender, contract, transaction, ts, CASE WHEN type = 'BETAKEY' AND EXISTS ( SELECT 1 FROM table1 t2 WHERE t2.sender = table1.sender AND t2.type = 'ALPHAKEY' -- 若ALPHAKEY必须关联特定contract,保留下面这行;否则删除 -- AND t2.contract = '1f469d53942358b1754aa314548ee85cec3d2089' ) THEN 'alpha' ELSE 'not alpha' END AS title FROM table1
修正说明
- 明确通过
type = 'BETAKEY'限定仅处理目标行类型 - 使用
EXISTS替代IN,性能更优(尤其数据量大时),且逻辑更清晰 - 子查询仅保留核心判断条件:同一sender存在ALPHAKEY记录,若业务上ALPHAKEY必须对应特定contract,再保留对应的contract过滤条件
内容的提问来源于stack exchange,提问作者drum
相关产品推荐
相关产品推荐

