SQL 多个连接语句问题
SQL multiple join statement issues
我正在尝试创建一个存储过程,它将检索 table(称为 CommsLog)并将其与用户 table 到 return 所有关联的名称匹配有了它。
用户数据库按别名存储所有用户,然后我尝试在数据库中查找他们的名字和姓氏,将它们连接起来,然后return将其放入我的结果
这是我目前得到的,但它只是 return 的一部分 table 并且两列的名称相同(这些应该不同)
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 table 看起来像:
+----+----------+--------------------------+----------+----------+---------+
| ID | CommType | Date | SentTo | SentFrom | Version |
+----+----------+--------------------------+----------+----------+---------+
| 12 | Test | 2014-12-19 09:38:10.000 | uk\tmot | uk\gmab | 1.10 |
+----+----------+--------------------------+----------+----------+---------+
用户 table 看起来像:
+---------+-----------+----------+------------+----------------------------------+
| Alias | FirstName | LastName | Telephone | email |
+---------+-----------+----------+------------+----------------------------------+
| uk\tmot | Tom | motoll | 0731424523 | tom.motoll@whosebug.com |
| uk\gmab | Grant | maberick | 0756463345 | grant.maberick@whosebug.com |
+---------+-----------+----------+------------+----------------------------------+
输出:
+----+----------+-------------------------+------------+----------------+---------+
| ID | CommType | Date | SentTo | SentFrom | Version |
+----+----------+-------------------------+------------+----------------+---------+
| 12 | Test | 2014-12-19 09:38:10.000 | Tom motoll | Grant maberick | 1.10 |
+----+----------+-------------------------+------------+----------------+---------+
您的意思是只获取用户发送给他们自己的记录吗?
这就是您的加入条件正在做的事情。
在我看来,您正试图在 SELECT
语句中提取 SentTo 用户的名称以及 SentFrom 用户的名称。如果是这种情况,那么您实际上需要将 USERS
table 加入您的查询两次,使用别名 - 一次用于您的 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
由于您没有 post 您的 table 结构或任何示例数据,您可能需要稍微调整该查询以使其工作,但它至少应该让您接近你在追求什么。
我正在尝试创建一个存储过程,它将检索 table(称为 CommsLog)并将其与用户 table 到 return 所有关联的名称匹配有了它。
用户数据库按别名存储所有用户,然后我尝试在数据库中查找他们的名字和姓氏,将它们连接起来,然后return将其放入我的结果
这是我目前得到的,但它只是 return 的一部分 table 并且两列的名称相同(这些应该不同)
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 table 看起来像:
+----+----------+--------------------------+----------+----------+---------+
| ID | CommType | Date | SentTo | SentFrom | Version |
+----+----------+--------------------------+----------+----------+---------+
| 12 | Test | 2014-12-19 09:38:10.000 | uk\tmot | uk\gmab | 1.10 |
+----+----------+--------------------------+----------+----------+---------+
用户 table 看起来像:
+---------+-----------+----------+------------+----------------------------------+
| Alias | FirstName | LastName | Telephone | email |
+---------+-----------+----------+------------+----------------------------------+
| uk\tmot | Tom | motoll | 0731424523 | tom.motoll@whosebug.com |
| uk\gmab | Grant | maberick | 0756463345 | grant.maberick@whosebug.com |
+---------+-----------+----------+------------+----------------------------------+
输出:
+----+----------+-------------------------+------------+----------------+---------+
| ID | CommType | Date | SentTo | SentFrom | Version |
+----+----------+-------------------------+------------+----------------+---------+
| 12 | Test | 2014-12-19 09:38:10.000 | Tom motoll | Grant maberick | 1.10 |
+----+----------+-------------------------+------------+----------------+---------+
您的意思是只获取用户发送给他们自己的记录吗? 这就是您的加入条件正在做的事情。
在我看来,您正试图在 SELECT
语句中提取 SentTo 用户的名称以及 SentFrom 用户的名称。如果是这种情况,那么您实际上需要将 USERS
table 加入您的查询两次,使用别名 - 一次用于您的 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
由于您没有 post 您的 table 结构或任何示例数据,您可能需要稍微调整该查询以使其工作,但它至少应该让您接近你在追求什么。