在查询Postgres中访问数组元素

时间:2020-11-12 07:18:18

标签: sql postgresql

我当前正在构建一个查询以从我的数据库中检索一些数据,我需要访问存储在数组中的文档,这就是表的方式 crm_company外观:

+ company_id +         documents_avaiable       + 
-     1      - [71788176,98705180,21468287,...] -   
-     2      - [11218494,12825726,10353038,...] -                                 

我还有一个crm_user文件供用户使用,它看起来像这样:

+ user_document +     email     +
-   71788176    - abc@email.com -  
-   98705180    - def@email.com - 
-   11218494    - hef@email.com - 

最终结果是:

+ user_document +     email     + company +
-   71788176    - abc@email.com -    1    -
-   98705180    - def@email.com -    1    -

我刚刚尝试过以下操作:

select documents_avaiable[0] from crm_company where crm_company.id = 1

但是我仍然无法从数组中检索文档。

在此先感谢您的提示或帮助。

1 个答案:

答案 0 :(得分:1)

如果按照Laurenz Albe的评论中的建议为时已晚,请执行以下操作:

  1. 使用查询(或创建视图)对公司文档列表进行规范化

    create view company_documents as
    select t.company_id, l.document_id
    from crm_company t
    cross join lateral
    (
      select unnest(t.documents_avaiable) as document_id
    ) l;
    
  2. 通过document_id使用join

    访问其他表中的文档详细信息
    select cd.document_id user_document, cd.company_id company, d.email
    from company_documents cd join crm_user d 
    on cd.document_id = d.user_document;