Sql 如何在一个表上联接两次并每次引用不同的列名?
因此,我遇到了这样一种情况:一个表伙伴与一个名为Regions的表有一对一的关系,并且通过一个名为Destinations的交集表与同一个表有一对多的关系。下面我的命名约定会帮助你理解我的意思Sql 如何在一个表上联接两次并每次引用不同的列名?,sql,sql-server,tsql,database-design,Sql,Sql Server,Tsql,Database Design,因此,我遇到了这样一种情况:一个表伙伴与一个名为Regions的表有一对一的关系,并且通过一个名为Destinations的交集表与同一个表有一对多的关系。下面我的命名约定会帮助你理解我的意思 Regions ====================== id | name ====================== 1 | "United States" 2 | "Mother Russia" 3 | "Belize" Partne
Regions
======================
id | name
======================
1 | "United States"
2 | "Mother Russia"
3 | "Belize"
Partners
=================================
id | name | region_id
=================================
1 | "B Obama" | 1
2 | "V Putin" | 2
Destinations
==============================
partner_id | region_id
==============================
1 | 2
1 | 3
2 | 1
2 | 3
我想要的是一个返回如下结果的查询
=======================================================
partner_name | partner_region | destination_region
=======================================================
"B Obama" | "United States" | "Mother Russia"
"B Obama" | "United States" | "Belize"
"V Putin" | "Mother Russia" | "United States"
"V Putin" | "Mother Russia" | "Belize"
问题是我不知道如何在Regions表上连接两次以进行此查询。我知道我想要的是
SELECT Partners.name AS partner_name,
Regions.name AS partner_region,
??? AS destination_region
FROM
Partners INNER JOIN Regions ON Partners.region_id=Regions.id
INNER JOIN Destinations ON Partners.id=Destinations.partner_id
但我不知道该填什么???因为区域已加入合作伙伴 您需要另一个加入:
请注意,表别名使查询更易于写入和读取。您需要另一个联接:
请注意,表别名使查询更易于写入和读取。您必须两次连接到区域:
您必须加入区域两次:
您需要再次添加另一个从目的地到区域的加入:
SELECT Partners.name AS partner_name,
Regions.name AS partner_region,
Regions2.name AS destination_region
FROM
Partners INNER JOIN Regions ON Partners.region_id=Regions.id
INNER JOIN Destinations ON Partners.id=Destinations.partner_id
INNER JOIN Regions AS Regions2 on Destinations.region_id = Regions2.id
注意,我在Regions表中添加了第二个别名Regions2。您需要该别名,以便明确地告诉服务器您需要哪些列,例如Regions2.name。您需要再次添加另一个从目的地到区域的连接:
SELECT Partners.name AS partner_name,
Regions.name AS partner_region,
Regions2.name AS destination_region
FROM
Partners INNER JOIN Regions ON Partners.region_id=Regions.id
INNER JOIN Destinations ON Partners.id=Destinations.partner_id
INNER JOIN Regions AS Regions2 on Destinations.region_id = Regions2.id
注意,我在Regions表中添加了第二个别名Regions2。您需要该别名,以便可以明确地告诉服务器您需要哪些列,例如Regions2.name
SELECT Partners.name AS partner_name,
Regions.name AS partner_region,
Regions2.name AS destination_region
FROM
Partners INNER JOIN Regions ON Partners.region_id=Regions.id
INNER JOIN Destinations ON Partners.id=Destinations.partner_id
INNER JOIN Regions AS Regions2 on Destinations.region_id = Regions2.id