SQL基于来自多个表的数据创建查询

时间:2014-07-11 14:32:53

标签: sql sql-server-2008 join union

我有一个SQL Server数据库,我想在一个主表中包含包含ID和连接的列?它们有3个其他表,其中这些ID与实际名称相匹配。

实施例

表格=滑动如下:

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中使用右键单击“保存为CSV”选项

3 个答案:

答案 0 :(得分: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

根据您的数据,您可能需要INNER JOIN而不是LEFT JOIN。

答案 1 :(得分: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

答案 2 :(得分:-1)

这是你要找的东西吗?     选择slips.ID,Usernames.Nickname1,Clientnames.Nickname1,Timeactnames.Nickname1
    来自单据,用户名,客户名,时间名     WHERE slips.UserID = Usernames.ID,slips.ClientID = Clientnames.ID,slips.TimeID = Timeactnames.ID;