PostgreSQL查询实现:ANY子句列表为空时返回全表数据
解决动态子类别筛选时列表为空返回全表的问题
直接在WHERE子句中添加判断条件,当筛选列表为空时跳过筛选逻辑返回所有数据,修改后的SQL查询如下:
SELECT * FROM table WHERE {{ $state.categoriesBadge.filter((item) => item.isSelected == true).map((item) => item.value) }} = '{}' OR column = ANY( {{ $state.categoriesBadge.filter((item) => item.isSelected == true).map((item) => item.value) }})
如果使用的是支持数组操作的数据库(比如PostgreSQL),也可以通过检查数组长度实现:
SELECT * FROM table WHERE array_length({{ $state.categoriesBadge.filter((item) => item.isSelected == true).map((item) => item.value) }}, 1) IS NULL OR column = ANY( {{ $state.categoriesBadge.filter((item) => item.isSelected == true).map((item) => item.value) }})
逻辑说明
- 未选中任何子类别徽章时,动态生成的筛选列表为空,第一个条件触发,查询返回全表所有数据
- 选中徽章后,筛选列表不为空,第二个条件生效,仅返回对应子类别条目
内容的提问来源于stack exchange,提问作者Maciej Ziolkowski
相关产品推荐
相关产品推荐

