Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在一个表上联接两次并每次引用不同的列名?_Sql_Sql Server_Tsql_Database Design - Fatal编程技术网

Sql 如何在一个表上联接两次并每次引用不同的列名?

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的表有一对一的关系,并且通过一个名为Destinations的交集表与同一个表有一对多的关系。下面我的命名约定会帮助你理解我的意思

        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