PostgreSQL выбирает несколько столбцов таблицы, которая подключена через сводную таблицу многие-ко-многим - PullRequest
2 голосов
/ 11 июля 2019

У меня есть этот запрос:

SELECT
    a.account_uuid,
    a.account_no,
    a.account_group_uuid,
    a.account_scope_uuid,
    a.created_at,
    a.deleted_at,
    s.service_uuid,
    s.status,
    st.service_type,
(
    SELECT
            c.company
    FROM companies c
    WHERE a.company_owner_uuid = c.company_uuid   
)
FROM
    accounts a 
LEFT JOIN
    services s 
ON a.account_uuid = s.account_uuid 
LEFT JOIN
    service_types st 
ON s.service_type_uuid = st.service_type_uuid
WHERE
    a.deleted_at IS NULL
ORDER BY
    a.account_no

И мне нужно объединить и выбрать несколько столбцов из таблицы people с помощью сводной таблицы accounts_contacts, которая будет иметь account_uuid и person_uuid. В таблице accounts_contacts есть также столбцы is_primary и is_active, и одновременно будет только один основной элемент, поэтому конечным результатом будут одно имя и фамилия. Это идея запроса:

SELECT
    p.first_name, p.last_name 
FROM
    people p 
INNER JOIN
    accounts_contacts ac 
ON ac.account_uuid = a.account_uuid 
AND ac.person_uuid = p.person_uuid 
WHERE
    ac.is_primary = true 
AND ac.is_active = true

Но не уверен, как вписать его в приведенный выше запрос. Подзапрос допускает только один из столбцов.

1 Ответ

1 голос
/ 11 июля 2019

account_contacts - это таблица «ассоциации» или «соединения».Это не сводная таблица.

Основная идея должна быть join s:

SELECT . . . ,
       p.first_name, p.last_name 
FROM accounts a LEFT JOIN
     services s 
     ON a.account_uuid = s.account_uuid LEFT JOIN
     service_types st 
     ON s.service_type_uuid = st.service_type_uuid LEFT JOIN
     accounts_contacts ac 
     ON ac.account_uuid = a.account_uuid LEFT JOIN
     people p
     ON ac.person_uuid = p.person_uuid AND
        ac.is_primary = true AND
        ac.is_active = true
...