代码之家  ›  专栏  ›  技术社区  ›  Blankman

基于关联表返回列中的值列表

  •  0
  • Blankman  · 技术社区  · 5 月前

    架构:

    Users
    - id
    - name
    
    Users_In_Company
    -company_id
    -user_id
    
    Companies
    -id
    -name
    

    我必须返回一个用户列表,其中一列也应该包含他们关联的所有公司的列表。

    SELECT u.*
    FROM users u
    

    输出:

    ID   NAME   Companies
    1    John   Acme1, Amazon, Walmart
    

    这里可以使用横向连接吗?

    注: 这是一个搜索结果查询,所以我需要记住性能。每次请求最多可以返回1000行。

    1 回复  |  直到 5 月前
        1
  •  1
  •   Lisan Al Gaib    5 月前

    是的,您可以使用LATERAL连接来实现结果。

    为了得到它,我们需要聚合每个用户的公司名称列表,然后将其作为结果的一部分返回。

    SELECT 
        u.id, 
        u.name, 
        COALESCE(c.companies, '') AS companies
    FROM 
        users u
    LEFT JOIN LATERAL (
        SELECT 
            string_agg(c.name, ', ') AS companies
        FROM 
            users_in_company uic
        JOIN 
            companies c ON uic.company_id = c.id
        WHERE 
            uic.user_id = u.id
    ) c;