【问题标题】:PostgreSQL: displaying cross-references inside a table in a user friendly wayPostgreSQL:以用户友好的方式在表中显示交叉引用
【发布时间】:2020-09-01 12:08:05
【问题描述】:

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

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

我在表中没有唯一参数,这样会容易得多。

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

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

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

我对 account_id 1 和 3 中都出现唯一参数这一事实感兴趣,正如参考单元格(即 1a,3a)所指出的那样。

这是我正在寻找的结果:

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

或者甚至只是第一行就足够了。

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

【问题讨论】:

  • 您不应该像这样存储逗号分隔的值。你有机会修复损坏的数据模型吗?
  • reference 列的数据类型是什么?
  • 如果references 包含10 个不同的值怎么办?那你想要的输出到底是什么?
  • > 引用列的数据类型是什么? JSON数组
  • > 如果引用包含 10 个不同的值怎么办?那么你想要的输出到底是什么?好问题。我希望它们集中在一个主要的 account_id 周围。不得不说,你这个问题让我有点难过。

标签: postgresql cross-reference


【解决方案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.

【讨论】:

    猜你喜欢
    • 2017-08-24
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-12
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    相关资源
    最近更新 更多