SQL 自行加入 + 另一个加入无效
SQL Self Join + Another Join Not working
我有两个 table,Job 和 User,我正在尝试收集一些记录。 Job 需要与 User 结合,而 User 则与自身结合。结构是:
JobID | OwnerID | ClientName
1 | 1 | Corey
-----------------------------
UserID | ManagerID | Name | Email
1 | 2 | Jon Smith | job@test.com
2 | | Jane Doe | jane@test.com
我希望获得一个 table,其中除了用户名之外还包含经理的电子邮件地址。我的查询是:
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 - 经理的信息。
我想我遇到了自连接问题。查询验证,所以我不知道它是什么。
非常感谢任何指导。
注意:以上 table/column 名称已被简化以保护无辜者。
您似乎在上次 JOIN
:
的字段中并列了 table 别名
这个: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 中的保留字,如果用作 tablename
可能会让您头疼
我有两个 table,Job 和 User,我正在尝试收集一些记录。 Job 需要与 User 结合,而 User 则与自身结合。结构是:
JobID | OwnerID | ClientName
1 | 1 | Corey
-----------------------------
UserID | ManagerID | Name | Email
1 | 2 | Jon Smith | job@test.com
2 | | Jane Doe | jane@test.com
我希望获得一个 table,其中除了用户名之外还包含经理的电子邮件地址。我的查询是:
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 - 经理的信息。
我想我遇到了自连接问题。查询验证,所以我不知道它是什么。
非常感谢任何指导。
注意:以上 table/column 名称已被简化以保护无辜者。
您似乎在上次 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 中的保留字,如果用作 tablename