PostgreSQL:以一种用户友好的方式在表内显示交叉引用

问题描述

我有一个表,其中包含帐户验证行。一个帐户可以有一个或多个与之相关的行,具体取决于它进行验证的尝试次数

在每个条目中都有一个参考,它告诉我该帐户的特定唯一参数是否出现在其他帐户验证中。问题在于引用也可以指向同一帐户,这对我没有用。我想找到共享唯一参数的帐户-即参考指向不同帐户的地方。

我在表中没有唯一的参数,这会使它变得容易得多。

这是一个示例(按创建时间排序):

| verification_id | account_id   | reference |
|-----------------|--------------|-----------|
|       4a        |      4       |     4a    |
|       3a        |      3       |    1a,3a  |
|       2b        |      2       |    2a,2b  |
|       2a        |      2       |     2a    |
|       1a        |      1       |     1a    |

我对参考文献指出2a和2b验证中都出现唯一参数这一事实不感兴趣,因为它们属于同一个帐户。

我很感兴趣一个事实,即参考单元格(即1a,3a)指出,account_id 1和3中都出现了唯一参数。

这是我要寻找的结果:

| account_id  | connected to |
|-------------|--------------|
|      1      |      3       |
|      3      |      1       |

或者仅第一行就足够了。

希望我在解释问题和结果方面做得很好。

解决方法

加入account_idverification_id的不等式,然后测试与&&的数组重叠:

select a.account_id,b.account_id as connected_to
  from verification a
       join verification b
         on a.account_id != b.account_id
        and a.verification_id != b.verification_id
        and string_to_array(a.reference,',') && 
              string_to_array(b.reference,');

Working fiddle here.