首页 > 解决方案 > 如果存在 INNER JOIN 的元素,则向 SELECT 添加新列

问题描述

我有 3 个表 PERSONS、COMPANIES 和 PERSON_CUSTOMER_COMPANY,如果此人是公司的客户(一个人可能是与每家公司的其他关系),则关系为 n 对 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 ...

标签: sqlhibernate

解决方案


Aninner 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;

推荐阅读