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

如何查询列值为'A'或逗号分隔字符串包含指定值的记录

问题原因
  • 你当前写法无法得到预期结果的核心问题是regexp_split_to_table属于表函数,返回的是多行结果集,不能直接放在IN子句中和标量值做匹配
  • 另外你示例中存储的逗号分隔字符串末尾多了多余逗号,拆分后会生成空字符串,也会干扰匹配逻辑
可行解法

解法1:用EXISTS子查询匹配拆分结果(适合需要对拆分后值做复杂处理的场景)

SELECT
    sds.scheme_code,
    rs.scheme_name
FROM
trea.salary_deduction_schemes sds
LEFT JOIN
trea.receipt_schemes rs
ON sds.scheme_code = rs.scheme_code
WHERE 
sds.list_object_head = 'A'
OR EXISTS (
    SELECT 1 
    FROM regexp_split_to_table(sds.list_object_head, E',') AS t(val)
    -- 目标值如果是数值类型可以写为 val::int = 16
    WHERE val = '16' 
    AND val <> '' -- 过滤末尾多余逗号拆分出的空值
)

解法2:字符串拼接匹配(性能更优,推荐常规场景使用)

不需要拆分字符串,直接通过前后补逗号的方式精准匹配,避免拆分的性能开销:

SELECT
    sds.scheme_code,
    rs.scheme_name
FROM
trea.salary_deduction_schemes sds
LEFT JOIN
trea.receipt_schemes rs
ON sds.scheme_code = rs.scheme_code
WHERE 
sds.list_object_head = 'A'
OR CONCAT(',', sds.list_object_head, ',') LIKE '%,16,%'
注意事项
  • 如果存储的逗号分隔值存在多余空格,可额外加TRIM(val)处理后再匹配
  • 如果目标值为数值类型,注意做类型转换,避免字符串和数值隐式转换导致匹配失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:09:03