PostgreSQL数组参数为空时返回全部数据的查询问题
解决PostgreSQL数组参数为空时返回全量数据的问题
可以通过逻辑或组合条件,同时处理参数为NULL、空数组以及正常有效值的场景:
select distinct departamento_nom from dim_publicas.dt_cliente dc where ${dpto} IS NULL OR ${dpto} = '{}' OR departamento_nom = ANY(${dpto})
关键说明
- 当参数
${dpto}是NULL或者空数组时,前两个条件成立,WHERE子句直接生效,返回所有去重的departamento_nom - 当参数是有效字符串数组时,前两个条件不触发,通过
= ANY()匹配数组中的所有元素,效果和原本的IN完全一致(PostgreSQL中IN对于数组参数等价于= ANY())
你之前用coalesce的问题在于:coalesce(${dpto}, departamento_nom)会强制统一返回类型,当参数非空时,单个字段值会被转为单元素数组,导致实际只匹配数组的第一个元素,这和你预期的多值匹配逻辑不符。
内容的提问来源于stack exchange,提问作者Hank Quinlan
相关产品推荐
相关产品推荐

