sql - 如果存在 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 ...
解决方案
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;
推荐阅读
- json - Web 抓取隐藏 API - 请求标头、cookie 和 XSFR-TOKEN 处理
- java - 用 PDFBox 裁剪页面并用白色填充矩形外部
- r - Rmarkdown 导入最新的网络摄像头图像?
- reactjs - Redux 不更新商店
- sql-server - Sql where 子句在过滤器为空的情况下返回所有内容
- javascript - VS Code 自动将语言从 React 更改为 JavaScript
- javascript - 如何在asp.net mvc视图中使用javascript访问json对象中数组的长度
- c# - 时间 Unity 后禁用脚本
- python - 如何将循环转换为函数
- c# - 部署问题,适用于我朋友的手机,但不适用于我的手机