使用LIKE与ANY(array)时查询条件失效的问题求解
问题解决:SQL中
like any条件失效的修复 问题根源
你写的'%sys%' like any(series_arr)逻辑完全搞反了。SQL的like语法规则是左侧为待匹配的字符串,右侧为通配符模式。你当前的写法是让通配符模式'%sys%'去匹配数组中的元素,这和你想要的“数组中存在包含sys的元素”逻辑相悖,导致这个条件永远不成立,最终只有'displays' = any(lob_arr)的统计生效。
修复方案
提供两种可靠的修复写法,根据你的数据库类型选择:
方案一:兼容性通用写法(支持大部分带数组功能的SQL数据库)
通过unnest展开数组,用exists子查询判断是否有符合条件的元素:
select sum(case when exists (select 1 from unnest(series_arr) elem where elem like '%sys%') or 'displays' = any(lob_arr) then revenue else 0 end) as sys_displ_revenue from mytable
方案二:简洁写法(适用于PostgreSQL等支持数组any配合like的数据库)
修正like的左右顺序,让数组元素作为待匹配对象,通配符模式放在右侧:
select sum(case when any(series_arr) like '%sys%' or 'displays' = any(lob_arr) then revenue else 0 end) as sys_displ_revenue from mytable
内容的提问来源于stack exchange,提问作者Reshmi Nair
相关产品推荐
相关产品推荐

