2010-06-25 64 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