sql - 相同外键的两列的 INNER JOIN

标签 sql sql-server tsql

假设我们有两个表:


AID BID1 BID2
--  ---- ----
01  01   02
02  01   03
03  02   01

表结核病
BID Name
--- ----
01  FOO
02  BOO
03  LOO

如果我想返回以下内容:
AID Name1
--  -----
01  FOO
02  FOO
03  BOO

我写了以下内容:
SELECT TA.AID, TB.Name as Name1 
FROM TB 
INNER JOIN TA on TB.BID = TA.BID1

但是,我无法弄清楚如何返回对应于 BID1 和 BID2 的 TB.Name。更具体地说,我想返回以下内容:
AID Name1 Name2
--  ----- -----
01  FOO   BOO
02  FOO   LOO
03  BOO   FOO

最佳答案

您可以多次加入:

SELECT TA.AID, tb1.Name AS Name1, tb2.Name AS Name2
FROM TA
LEFT JOIN TB tb1
  ON TA.BID1 = tb1.BID
LEFT JOIN TB tb2
  ON TA.BID2 = tb2.BID;

注:LEFT OUTER JOIN将确保您始终从 TA 获取所有记录即使没有匹配。

LiveDemo

关于sql - 相同外键的两列的 INNER JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37229557/

相关文章:

MySQL如何填充范围内缺失的日期?

mysql - 使用 MySQL 选择随时间变化的大量数据的一部分

mysql - SQL 查询联合具有不同列数的多个表

sql - 如何使用插入到第一个表的行的标识值更新第二个表

在 SELECT 中使用 FILTER 的 SQL GROUP BY

MySQL/JPA : How create a correclty relation and cascade?

java - 表中的更多名称属性

sql - 计算一列中另一列中有多个值的不同记录

sql - 电话号码 : Using IF statements in a procedure produces multiple plans

c++ - 以错误的顺序运行包含大量 INSERT 语句和一个 SELECT 语句的查询