sql - 加入 2 个字段的表格
问题描述
我想从表中提取一个人和他们的主管姓名。该persons
表有supervisor_id
和person_id
。该names
表有name_id
一个Full Name
字段。如果我加入Person
ONsupervisor_id
或person_id
,我如何让另一个也显示?
解决方案
您需要加入两次,每个关系一次:
SELECT
-- Persons' columns
P.*,
-- Superviser name columns
SN.*,
-- Person name columns
PN.*
FROM
persons AS P
LEFT JOIN names AS SN ON P.supervisor_id = SN.name_id
LEFT JOIN names AS PN ON P.person_id = PN.name_id
或者您可以使用OR
子句加入,但您无法知道您加入了哪条记录,除非您使用CASE
.
SELECT
-- Persons' columns
P.*,
-- name columns
N.*,
IsSupervisor = CASE WHEN P.supervisor_id = N.name_id THEN 'Yes' ELSE 'No' END
FROM
persons AS P
LEFT JOIN names AS N ON
P.supervisor_id = N.name_id OR
P.person_id = N.name_id
最后一种方法将显示 2 行,因为它会在不同的情况下匹配一个或另一个,而不是同时匹配同一persons
行(如第一个示例)。
推荐阅读
- android - 从 zip 安装 android studio 时在 Windows 10 上没有 SDK
- android - 有人知道系统应用程序是否可以在 Android 中扩展 VpnService 吗?
- python - 绘制客户访问应用程序的次数
- ms-access - Ms Access中直接使用ttf/otf fontfile
- shell - 我无法使用 shell 脚本替换文件中的内容
- javascript - 是否可以在 React Native 中将组件作为后台工作?
- orchardcms - 在 Orchard 中卸载模块
- google-cloud-platform - 如何让错误日志出现在堆栈驱动程序错误报告中?
- networking - NETCONF(.Yin/Yang 文件)中的 include 和 import 语句有什么区别
- mongodb - com.mongodb.connection.BufferProvider 实现的目的是什么