Добавьте новый столбец в SELECT, если существуют элементы INNER JOIN - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть 3 таблицы PERSONS, COMPANIES и PERSON_CUSTOMER_COMPANY, которые устанавливают отношение n-to-n, если человек является клиентом компании (у человека могут быть отношения других с каждой компанией).

Этот запросвозвращает все компании, имеющие отношение к данному лицу в качестве клиента (внутреннее объединение 3-й строки).

select co.name from COMPANIES co  
            INNER JOIN PERSONS p on p.COMPANY_ID = co.id 
            INNER JOIN PERSON_CUSTOMER_COMPANY pcc on pcc.PERSON_ID = p.PERSON_ID 
            WHERE p.PERSON_ID = 123456;

Мне нужно изменить этот запрос, чтобы вернуть все компании от лица, даже если они не связаны вPERSON_CUSTOMER_COMPANY и дополнительное поле, указывающее, является ли человек клиентом компании.

Что-то вроде "isCustomer"

select co.name, isCustomer from COMPANIES co ...

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Я бы, наверное, использовал exists:

SELECT co.name, 
       (CASE WHEN EXISTS (SELECT 1
                          FROM PERSON p
                          WHERE p.COMPANY_ID = co.id  AND
                                p.PERSON_ID = 123456
                         )
             THEN 'Yes' ELSE 'No'
        END) as IsCustomer
FROM COMPANIES co;

Используется только PERSON, потому что это JOIN, который вы используете в своем запросе.

Я подозреваю, что вы действительно хотите:

SELECT co.name, 
       (CASE WHEN EXISTS (SELECT 1
                          FROM PERSON_CUSTOMER_COMPANY pcc
                          WHERE pcc.COMPANY_ID = co.id  AND
                                pcc.PERSON_ID = 123456
                         )
             THEN 'Yes' ELSE 'No'
        END) as IsCustomer
FROM COMPANIES co;

В любом случае необходимы только две таблицы.

0 голосов
/ 19 ноября 2018

inner join будет возвращать только те результаты, которые совпадают в обеих таблицах. Поскольку вы ищете потенциальные компании, у которых нет записей в таблице person_customer_company, вам нужен outer join. Затем вы можете использовать оператор case для создания нового столбца:

SELECT co.name, 
    CASE WHEN pcc.Person_id IS NULL then 'No' else 'Yes' End as IsCustomer 
FROM COMPANIES co  
    INNER JOIN PERSONS p on p.COMPANY_ID = co.id 
    LEFT JOIN PERSON_CUSTOMER_COMPANY pcc on pcc.PERSON_ID = p.PERSON_ID 
WHERE p.PERSON_ID = 123456;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...