Postgres基于来源列的自定义列:生成无Null的文本匹配结果
问题与解决方案:PostgreSQL多列匹配查询并规整输出
需要从两个表(表A、表B)的三个文本列(A.text1、A.text2、B.text3)中,查询包含%postgres%的内容,要求输出规整的结果集,包含两列:
- Type:标明匹配内容的来源列
- Text:匹配到的具体内容
初始方案的问题
最初尝试关联查询的方式,虽然能筛选出符合条件的数据,但结果里存在大量null值,格式不符合要求:
select a.text1, a.text2, b.text3 from a inner join b on a.id = b.aId where a.text1 like '%postgres%' or a.text2 like '%postgres%' or b.text3 like '%postgres%'
最终可行方案
通过UNION ALL子查询拆分各列数据,再统一过滤匹配条件,实现了无null值的规整输出:
select * from (select 'text1' as type, text1 as text from a union all select 'text2' as type, text2 as text from a union all select 'text3' as type, text3 as text from b) as result where result.text like '%postgres%'
内容的提问来源于stack exchange,提问作者Timo
相关产品推荐
相关产品推荐

