首页 > 解决方案 > 基于字符串包含的 SQL 连接

问题描述

我有以下 SQL 表:

COL_A      || COL_B    ||
=========================
aa         ||    1     ||
aa         ||    2     ||
aa.bb      ||    3     ||  
aa.bb.cc   ||    4     ||  
aa.bb.cc   ||    5     ||
dd         ||    6     ||
dd.ee      ||    7     ||  

作为 SELECT 查询的一部分,我想按 Col_A 的值进行分组,并根据 Col_A 中的值作为彼此的子集连接 Col_B 中的值。这意味着,如果 Col_A 的值包含在 Col_A 的另一个值中/等于 Col_A 的另一个值,则超集/相同 Col_A 值的对应 Col_B 应该连接在一起。

期望的结果:

COL_A      || COL_B                 ||
======================================
aa         ||   [1, 2, 3, 4, 5]     ||
aa.bb      ||   [3, 4, 5]           ||  
aa.bb.cc   ||   [4, 5]              ||  
dd         ||   [6, 7]              ||
dd.ee      ||   [7]                 ||  

标签: sqlpostgresql

解决方案


join您可以使用 self array_agg

select t1.col_a, array_agg(distinct t2.col_b) 
from vals t1 join vals t2 on t2.col_a ~ t1.col_a 
group by t1.col_a order by t1.col_a

推荐阅读