SQL查询 - 两次加入同一列

时间:2015-01-27 01:50:31

标签: sql join

我无法实现结果,我想尝试两次从表中加入一列。

我的第一个表是" dbo.Sessions",其中包含基本会话信息,如用户ID,项目ID,登录/注销日期和时间等。

我需要加入用户名和项目名称。但是,这些可以在另一个表中找到,但是在同一列(dbo.tblObjects.Name)中。

示例:

+------+---------------+
| k_Id | Name          |
+------+---------------+
|   1  | AgentName1    |
|   2  | ProjectNameX  |
|   3  | ProjectNameY  |
|   4  | AgentName2    |
|   5  | ProjectNameZ  |
|   6  | AgentName3    |
+------+---------------+

为了尝试实现我的目标,我使用了两个" LEFT JOIN"。但是,我在两者中都得到了重复的结果。我要么得到两个列来显示项目名称或用户名(取决于哪个" LEFT JOIN"是第一个)。

这就是我现在所拥有的:

SELECT SysDB.dbo.Sessions.*, SysDB.dbo.tblObjects.Name AS AgentName, SysDB.dbo.tblObjects.Name AS ProjectName
FROM SysDB.dbo.Sessions
LEFT JOIN SysDB.dbo.tblObjects ON SysDB.dbo.Sessions.userId = SysDB.dbo.Objects.k_Id
LEFT JOIN SysDB.dbo.tblObjects ON SysDB.dbo.Sessions.projectId = SysDB.dbo.Objects.k_Id
WHERE (SysDB.dbo.Sessions.loginDate BETWEEN 'm/d/yyyy' AND 'm/d/yyyy')

注意:SysDB是我每次都识别的数据库的名称,因为此查询要在外部运行。我也没有使用"使用SysDB"在我选择之前,因为它不能从VBA宏开始工作,这将从。

开始

注2:我在这个网站上发现了一个解决这个问题的线程,但我无法理解正在做什么,它可以追溯到2012年。有关别名的事情。该解决方案提供了添加" ls。"和" lt。"在表名之前,但这对我不起作用。说桌子不存在。

SQL Query Join Same Column Twice

注3:我尝试了很多不同的东西,例如:

LEFT JOIN SysDB.dbo.tblObjects AS AgentName ON SysDB.dbo.Sessions.userId = SysDB.dbo.tblObjects.k_Id
LEFT JOIN SysDB.dbo.tblObjects AS ProjectName ON SysDB.dbo.Sessions.projectId = SysDB.dbo.tblObjects.k_Id

任何见解都将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

通过为每个表提供别名sessionagentproject,您可能会更容易看到自己在做什么

SELECT session.*, agent.Name AS AgentName, project.Name AS ProjectName
  FROM SysDB.dbo.Sessions session
       LEFT JOIN SysDB.dbo.tblObjects agent 
              ON session.userId = agent.k_Id
       LEFT JOIN SysDB.dbo.tblObjects project 
              ON project.projectId = session.k_Id
 WHERE (session.loginDate BETWEEN 'm/d/yyyy' AND 'm/d/yyyy')