我有两个表,Job和User,我正在尝试将一些记录整合在一起。作业需要与用户和用户联系。结构是:
JobID | OwnerID | ClientName
1 | 1 | Corey
-----------------------------
UserID | ManagerID | Name | Email
1 | 2 | Jon Smith | job@test.com
2 | | Jane Doe | jane@test.com
除了用户名,我还希望获得一个包含经理电子邮件地址的表格。我的疑问是:
SELECT
Job.ClientName as 'ClientName',
U1.Name as 'SalesPersonName',
U2.Email as 'ManagerEmail'
FROM
Job
INNER JOIN User U1 ON Job.OwnerID = U1.UserID
INNER JOIN User U2 ON U1.UserID = U2.ManagerID
WHERE
Job.ID = '1'
这会拉出所有作业数据,以及U1的所有数据......但是无法填充U2 - 管理员的信息。
我想我已经搞砸了自我加入的事情。查询验证,所以我不知道它是什么。
非常感谢任何指导。
注意:上面的表/列名称已经过简化以保护无辜者。
答案 0 :(得分:0)
看起来你将表别名并置在上一个JOIN
的字段中:
这:FULL JOIN User U2 ON U1.UserID = U2.ManagerID
应该是:FULL JOIN User U2 ON U2.UserID = U1.ManagerID
完整查询:
SELECT
Job.ClientName as 'ClientName',
U1.Name as 'SalesPersonName',
U2.Email as 'ManagerEmail'
FROM
Job
FULL JOIN User U1 ON Job.OwnerID = U1.UserID
FULL JOIN User U2 ON U2.UserID = U1.ManagerID
WHERE
Job.ID = 1 --removed ticks here, assuming int column
注意:您不需要FULL JOIN
,除非有记录不能连接在一起,并且您希望保留结果集中包含NULL
值的记录。对于提供的示例,基本INNER JOIN
可以使用,但是您可能需要FULL JOIN
作为真实数据集,因此我将其保留。
注2:user
是许多DBMS中的保留字,如果用作表名,可能会让您感到头痛