Knex 加入属于相同 table 的列

Knex join on column belonging to same same table

使用 Knex.js,我正在尝试查询 table 个用户。对于此场景唯一重要的列是 internal_id(键)、namesupervisor_id。每个用户(一个用户除外)都有一个主管,他们的记录存储了该主管的 ID。在我的应用程序中查看个人用户记录时,我想查询用户 table 获取特定于该用户的信息 以及对相同用户的加入 table 以便我可以检索主管姓名。我相信我面临的部分问题是我包含了一个 WHERE internal_id = current page user id,所以我总是返回当前用户的名字作为他们自己的主管。 SQL 的查询输出如图所示。查询结果如下。我以这种方式设置查询,因为 Knex 不允许在不使用别名的情况下在同一 table 上进行任何左连接。

select [dbo].[olms-users].*, [dbo].[user-groups].[name] as [user_group_texts], [dbo].[olms-users].[name] as [supervisor_name]
from [dbo].[olms-users]
left join [dbo].[user-groups] on [dbo].[olms-users].[user_groups] = [dbo].[user-groups].[internal_id]
left join [dbo].[olms-users] as [all_users] on [dbo].[olms-users].[supervisor_id] = [dbo].[olms-users].[internal_id]
where [dbo].[olms-users].[internal_id] = '12716149'

除了创建更多 table 以供我对其进行子查询之外,我尝试做的事情是否可以通过单个 table 完成并且可能在 Knex 中加入 left join?我也可以尝试从任何提议的 SQL 答案向后工作。感谢任何帮助或见解。

第 1 步:为了让您的查询更清晰,请使用简短、相关的 table 别名,例如

  • U 为 [dbo].[olms-users]
  • UG [dbo].[user-groups]
  • S for [dbo].[olms-users] 与主管有关

第 2 步:检查您是否引用了正确的 table/alias - 事实证明您不是:

  • 在您的主管连接中,您使用了 U 中的两列,而不是 U 中的一列和 S 中的一列。
  • 在您的查询中,您引用 U 作为主管姓名而不是 S。
select
    U.*
    , UG.[name] as [user_group_texts]
    -- Following needs to reference S not U!
    , S.[name] as [supervisor_name]
from [dbo].[olms-users] U
left join [dbo].[user-groups] UG on UG.[internal_id] = U.[user_groups]
-- Following need to join S to U, not U to U!
left join [dbo].[olms-users] S on S.[internal_id] = U.[supervisor_id]
where U.[internal_id] = '12716149';

注意:3 部分列命名(例如 [dbo].[olms-users].[internal_id])将在 SQL 服务器中弃用,因此最好停止使用它。