2010-02-08 19 views
1

以下是我正在使用的數據集示例。我想編寫一個查詢,讓我從項目表中要求的列,並代替用戶ID的顯示從用戶表中的用戶名:據我可以SQL Server JOIN - 在映射到另一個表的一個查詢中顯示兩個連接的值?

Table 1 - users table 

User ID | User Name 
-------------------- 
12  | Fred 
13  | Ted 
14  | Ned 

Table 2 - items Table 

Item ID | Submitted User | Assigned User 
---------------------------------------- 
234  | 12    | 14 
345  | 12    | 13 
456  | 14    | 12 

這是得到,它返回一個標有正確的用戶名:

SELECT users.[user name] AS [Submitted User] FROM items 
JOIN users ON items.[Assigned User] = users.[User ID] 
WHERE items.[Item ID] = '234' 

與此問題是,當一個領域的作品,我需要得到雙方提交的用戶和分配的用戶。我試圖在一個查詢中做到這一點......我有一種感覺,它可以完成,但我只是不知道如何。如果我嘗試多次指定字段,則會收到關於相關性的錯誤。下面是我的嘗試是一個例子給出的相關性錯誤:

SELECT users.[user name] AS [Submitted User], users.[user name] AS [Assigned User] FROM items 
JOIN users ON items.[Submitted User] = users.[User ID] 
JOIN users ON items.[Assigned User] = users.[User ID] 
WHERE items.[Item ID] = '234' 

這正是我想要做的事:

SELECT 
    items[Submitted User].users.[user name] AS [Reported User], 
    items[Assigned User].users.[user name] AS [Assigned User] 
WHERE items.[Item ID] = '234'</pre> 

這是我想要得到的迴應:

Submitted User | Assigned user 
Fred   - Ted 

回答

6

您想要別名您的JOIN表,以便您可以加入它兩次。請看下圖:

SELECT 
    submitted.[user name] AS [Submitted User], 
    assigned.[user name] AS [Assigned User] 
FROM items 
    LEFT JOIN users submitted ON items.[Submitted User] = submitted.[User ID] 
    LEFT JOIN users assigned ON items.[Assigned User] = assigned.[User ID] 
WHERE items.[Item ID] = '234' 

其他一些建議:

  • 表2的列名應提交的用戶ID,指定的用戶ID,使之更加明確要加入的ID。
  • 你可能想讓你的ID字段INT。它使聯接更快,空間更小。
  • 不要忘記在兩個表的ID字段上建立索引,以便JOIN可以利用它們。
  • 感謝astander,改爲加盟LEFT JOIN,因爲你可能希望看到的結果
+0

多數民衆贊成罰款。 +1爲好建議X-) – 2010-02-08 18:22:20

+0

非常棒,非常感謝!我花了幾次嘗試將其轉換爲我的數據庫表和值......但在做完這些之後,我認爲我對它正在做的事情有了更好的瞭解。再次感謝! – DirtyBirdNJ 2010-02-08 20:41:26

相關問題