2014-07-11 32 views
0

我有一個SQL Server數據庫,我想要一個主表中包含ID和連接的列的主表?他們與其他3個表中的ID匹配實際名稱。SQL根據多個表中的數據創建查詢

表=卡瓦看起來像這樣:

ID | UserID | ClientID | TimeID 
--------------------------------- 
10 | 35 | 48 | 27 

我已其他3個表稱爲Usernames, Clientnames, Timeactnames

這些表中的每一個看起來像這樣:

用戶名

ID | Nickname1 | 
---------------- 
35 | Shawn | 

Clientnames

ID | Nickname1 | 
---------------- 
48 | Roger | 

Timeactnames

ID | Nickname1 | 
---------------- 
27 | Filing | 

我想有一個新的查詢結果,顯示票據表的結果是這樣的:

ID | UserID | ClientID | TimeID 
--------------------------------- 
10 | Shawn | Roger | Filing 

這可能嗎?

我試圖連接與聯合,但我從來沒有得到這一結果我得到的結果的一些大規模的巨大的表組合:

SELECT tsslips.*, ClientData.*, UserData.*, TimeActData.* FROM slips JOIN ClientData ON ClientData.ID = slips.ClientID JOIN TSUserData ON UserData.ID = slips.UserID JOIN TimeActData ON TimeActData.ID = slips.TimeActID 

所有我得到的是一個非常巨大的長表把所有的信息,但不是像我想要的新合併表。

然後我嘗試這樣做:

SELECT * FROM (SELECT UserID, ClientID, TimeActID FROM Slips UNION ALL SELECT Nickname1 FROM ClientData UNION ALL SELECT Nickname1 FROM UserData UNION ALL SELECT Nickname1 FROM TimeActData) all_tables WHERE all_tables.ClientID = 'something' 

但我不認爲我格式化或正確使用那一個,因爲我得到一個錯誤,說:

消息205,級別16,狀態1,第1行使用UNION,INTERSECT或EXCEPT運算符組合的所有查詢在目標列表中必須具有相同數量的表達式。

我試圖讓查詢結果,這樣我可以使用右鍵另存爲SQL Server 2008中

回答

1
SELECT s.ID, u.NickName1 As UserID, c.NickName1 As ClientID, t.NickName1 As TimeID 
FROM Slips s 
LEFT JOIN Username u ON u.ID = s.UserID 
LEFT JOIN ClientNames c ON c.ID = s.ClientID 
LEFT JOIN TimeactNames t on t.ID = s.TimeID 

CSV選項根據您的資料,您可能希望內部聯接,而不是左連接。

+0

這工作得很好,但有可能讓滑動表上的列數據的其餘部分?現在新的最終結果查詢顯示了我們要求它加入的確切數據,但是我希望我們還沒有加入其他字段。例如,有一個標籤爲「Description」的列花費的時間|日期| 除了加入的數據字段之外,我還想要這些字段。非常感謝你的幫助! – Shawn

+0

只需在選擇列表中包括這些字段:s.Description,s.Timespent等 –

+0

完美,非常感謝Joel! – Shawn

0

你可以試試這個查詢

SELECT Slips.ID,Usernames.Nickname1 AS UnserID,Clientnames 
     ,Nickname1 AS ClientID 
     ,Timeactnames.Nickname1 AS TimeId 
FROM Slips 
LEFT JOIN Usernames ON Slips.UserId = Usernames.ID 
LEFT JOIN Clientnames ON Slips.ClientId = Clientnames.ID 
LEFT JOIN Timeactnames ON Slips.TimeId = Timeactnames.ID 
+0

感謝您的幫助!我能夠用上面提到的另一種方法得到我需要的東西。 – Shawn

-1

這是你正在尋找喜歡的東西?
選擇slips.ID,Usernames.Nickname1,Clientnames.Nickname1,Timeactnames.Nickname1
FROM單,用戶名,Clientnames,Timeactnames
WHERE slips.UserID = Usernames.ID,slips.ClientID = Clientnames.ID,slips.TimeID = Timeactnames。ID;

+0

感謝您的幫助!我能夠用上面提到的另一種方法得到我需要的東西。 – Shawn

相關問題