SQL 查询 - 两次连接同一列

SQL Query - Join the same column twice

我在尝试从 table 中加入列两次时无法获得我想要的结果。

我的第一个 table 是 "dbo.Sessions",其中包含基本会话信息,例如用户 ID、项目 ID、login/logout 日期和时间等。

我需要加入用户名和项目名。然而,这些在另一个 table 中找到,但在同一列 (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是我每次识别的数据库名,因为这个查询要对外运行。我在选择之前也没有使用 "USE SysDB",因为它在 VBA 宏中不起作用,它将 运行 来自。

注意 2:我在此站点上找到了一个线程来解决这个确切的问题,但我不明白正在做什么,它可以追溯到 2012 年。关于别名的一些事情。该解决方案提供在 table 名称之前添加 "ls." 和 "lt.",但这对我不起作用。说 table 不存在。

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

如有任何见解,我们将不胜感激。谢谢!

您可能会发现通过给每个 table 一个别名(下面的 sessionagentproject)[=14] 可以更容易地看到您在做什么=]

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')