You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Redshift 如何将CTE中存储的逗号分隔字符串作为IN查询可用列表

问题根源

当前CTE返回的是单条完整逗号分隔字符串,IN操作符要求子查询返回单列多行值,'tag1'无法与完整字符串'tag1, tag2, tag3'等值匹配,因此永远返回0。

可行解法

以下写法均保留你在查询顶部CTE集中定义变量的逻辑,后续维护时只需修改CTE内的字符串即可,无需改动下方匹配逻辑。

方案1:转数组后用ANY匹配(性能更优)

无需将数组拆为多行,直接对拆分后的数组做包含判断:

WITH tmp AS (
    -- 拆分字符串时自动清理每个tag前后的空格,兼容分隔符后带任意数量空格的场景
    SELECT array_agg(trim(tag)) AS tags
    FROM unnest(string_to_array('tag1, tag2, tag3', ',')) AS tag
)
SELECT 
    CASE WHEN 'tag1' = ANY(SELECT tags FROM tmp) THEN 1 ELSE 0 END AS matched_tags

方案2:拆成多行后用原生IN匹配(和你原有写法逻辑兼容)

更贴合你原本写IN子查询的使用习惯,可直接复用原有查询逻辑:

WITH tmp AS (
    SELECT trim(unnest(string_to_array('tag1, tag2, tag3', ','))) AS tags
)
SELECT 
    CASE WHEN 'tag1' IN (SELECT tags FROM tmp) THEN 1 ELSE 0 END AS matched_tags
注意事项
  • 必须加trim()清理每个tag前后的空格,否则拆分后会出现' tag2'无法匹配'tag2'的问题
  • 不推荐固定数量的split_part逐个拆分写法,新增tag时需要手动调整拆分逻辑,维护成本远高于上述动态拆分的方案

内容的提问来源于stack exchange,提问作者Lilz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 07:57:01