2010-06-25 66 views
2

我在一个表中有两个外键的表。来自一个表的两个外键的SQL查询

 
Table PROJECTS 
     - Id 
     - Owner - FK 
     - Client - FK 

 
table USERS 
     - Id 
     - Name 

我想选择与业主和客户的适当的名称所有项目

结果应该是这样的:

Id | OwnerName | ClientName

回答

11

你只需要两个连接到该表。

SELECT p.Id, 
     u1.Name OwnerName, 
     u2.Name ClientName 
FROM Projects p 
     LEFT JOIN 
       Users u1 
       ON p.Owner = u1.Id 
     LEFT JOIN 
       Users u2 
       ON p.Client = u2.Id 
+0

+ 1:您的速度更快 – 2010-06-25 21:36:44

2

你可以用括号加入到表中多次做出友好的输出名称:

SELECT P.ID AS [Projects ID], 
     U1.Name AS [Owner Name], 
     U2.Name AS [Client Name] 
FROM  Projects P 
     LEFT OUTER JOIN Users U1 ON (P.OwnerID = U1.ID) 
     LEFT OUTER JOIN Users U2 ON (P.ClientID = U2.ID) 

而且我们随时有一个ID,我的工作,我们通常包括在FK名。所以,我的回答假装是这样的话......

此外,如果P.OwnerID和P.ClientID需要在项目的条目,你可以使用一个INNER JOIN代替LEFT OUTER JOIN ....

+0

列别名的方括号是Access/SQL Server特有的,除非将其用双引号引起来。另外,JOIN语法中的括号是不必要的 - 在SQL中,没有什么比在人们不需要它的东西的情况下倾倒括号更令人讨厌。 – 2010-06-25 21:58:34