SQL自加入+另一个加入不起作用

问题描述 投票:1回答:1

我有两个表,Job和User,我正在尝试将一些记录汇总在一起。作业需要与用户和用户联系。结构是:

 JobID | OwnerID | ClientName
   1   |    1    |   Corey
 -----------------------------
 UserID | ManagerID |    Name   | Email
    1   |     2     | Jon Smith | [email protected]
    2   |           | Jane Doe  | [email protected]

我想要获取一个包含经理的电子邮件地址的表,以及用户名。我的查询是:

 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 - 管理员的信息。

我想我自己加入的东西搞砸了。查询验证,所以我不知道它是什么。

非常感谢任何指导。

注意:上面的表/列名称已经过简化,以保护无辜者。

sql self-join
1个回答
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中的保留字,如果用作表名,可能会让您头疼

© www.soinside.com 2019 - 2024. All rights reserved.