SQL多个连接语句问题

时间:2015-05-22 15:52:51

标签: sql sql-server stored-procedures join inner-join

我试图创建一个存储过程来检索一个表(称为CommsLog)并将其与用户表匹配,以返回与之关联的所有名称。

用户数据库按别名存储所有用户,然后我试图在数据库中查找他们的名字和姓氏,将它们连接起来并将其返回到我的结果中

这是我目前所得到的,但它只返回表格的一部分,两列的名称相同(这些应该是不同的)

SELECT 
    CommsLog.ID, 
    CommsLog.CommType, 
    CommsLog.Date, 
    Users.FirstName +' ' + Users.LastName, 
    Users.FirstName +' ' + Users.LastName, 
    CommsLog.Version 
FROM CommsLog
INNER JOIN Users
ON CommsLog.SentTo=Users.Alias and CommsLog.SentFrom=.Users.Alias

编辑:使用数据和输出进行更新

CommsLog表格如下:

+----+----------+--------------------------+----------+----------+---------+
| ID | CommType |           Date           |  SentTo  | SentFrom | Version |
+----+----------+--------------------------+----------+----------+---------+
| 12 | Test     | 2014-12-19 09:38:10.000  | uk\tmot  | uk\gmab  | 1.10    |
+----+----------+--------------------------+----------+----------+---------+

用户表格如下:

+---------+-----------+----------+------------+----------------------------------+
|  Alias  | FirstName | LastName | Telephone  |              email               |
+---------+-----------+----------+------------+----------------------------------+
| uk\tmot | Tom       | motoll   | 0731424523 | tom.motoll@stackoverflow.com     |
| uk\gmab | Grant     | maberick | 0756463345 | grant.maberick@stackoverflow.com |
+---------+-----------+----------+------------+----------------------------------+

输出继电器:

+----+----------+-------------------------+------------+----------------+---------+
| ID | CommType |          Date           |   SentTo   |    SentFrom    | Version |
+----+----------+-------------------------+------------+----------------+---------+
| 12 | Test     | 2014-12-19 09:38:10.000 | Tom motoll | Grant maberick | 1.10    |
+----+----------+-------------------------+------------+----------------+---------+

2 个答案:

答案 0 :(得分:2)

在我看来,您试图在SELECT语句中同时提取SentTo用户的名称以及SentFrom用户的名称。如果是这种情况,那么您实际上需要将USERS表加入您的查询两次,使用别名 - 一次用于SentTo用户,一次用于SentFrom用户。请尝试使用此查询,而不是:

SELECT 
    CSLL.CommsLog.ID, 
    CSLL.CommsLog.CommType, 
    CSLL.CommsLog.Date, 
    UserTo.FirstName +' ' + UserTo.LastName, 
    UserFrom.FirstName +' ' + UserFrom.LastName, 
    CSLL.CommsLog.Version 
FROM CSLL.CommsLog
INNER JOIN CSLL.Users UserTo ON CSLL.CommsLog.SentTo=UserTo.Alias
INNER JOIN CSLL.Users UserFrom ON CSLL.CommsLog.SentFrom=UserFrom.Alias

由于您没有发布您的表格结构或任何示例数据,您可能需要调整一下该查询以使其正常工作,但它至少应该让您接近您所追求的目标。

答案 1 :(得分:0)

您是否只想获取从用户发送给自己的记录? 这就是你的连接条件正在做的事情。