我无法实现结果,我想尝试两次从表中加入一列。
我的第一个表是" 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
任何见解都将不胜感激。谢谢!
答案 0 :(得分:0)
通过为每个表提供别名session
,agent
,project
,您可能会更容易看到自己在做什么
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')