【问题标题】:How can i join two tables with two columns that refers the same column in the second table in SQL Server如何将两个表与 SQL Server 中第二个表中引用同一列的两列连接起来
【发布时间】:2021-06-10 14:40:04
【问题描述】:

我有两个表要加入。

第一个表有两列

  1. 记录所有者的用户 ID。
  2. 已分配用户的用户 ID。

第二个表有 userId 和 username 列。第一个表的这两列是指同一个表的同一列。我想在一个视图中查看两个用户名,但我无法同时获得它们。我该怎么做?

编辑

select
    TASKID,
    CREATED_BY,
    CREATED_AT,
    ASSIGNED_USER,
    USERNAME ,
    DEADLINE,
    USERNAME
from 
    TASKS
inner join 
    USERS on ASSIGNED_USER = USERID

我可以通过上面的查询得到ASSIGNED_USER的用户名。我已经尝试了第二个来获取两个用户名,但它没有用

select
    TASKID,
    CREATED_BY,
    CREATED_AT,
    ASSIGNED_USER,
    USERNAME ,
    DEADLINE,
    USERNAME
from 
    TASKS
inner join 
    USERS on ASSIGNED_USER = USERID and CREATED_BY = USERID

它返回一个空结果。

【问题讨论】:

  • “但我不能同时获得这些” 为什么不呢?你试过什么?为什么它不起作用?

标签: sql sql-server view


【解决方案1】:

您必须加入用户两次,一次为 CREATED_BY,一次为 ASSIGNED_USER:

select
    TASKID,
    CREATED_BY,
    CREATED_AT,
    ASSIGNED_USER,
    USERNAME ,
    DEADLINE,
    USERNAME
from TASKS
inner join USERS u1 on ASSIGNED_USER = u1.USERID 
inner join USERS u2 on CREATED_BY = u2.USERID

【讨论】:

    【解决方案2】:

    加入 USERS 两次以解码不同的引用

    select TASKID, CREATED_BY, CREATED_AT, ASSIGNED_USER, au.USERNAME assignedUser_Name, DEADLINE,  uc.USERNAME createdByUser_Name
    from TASKS t
    inner join USERS au
    on t.ASSIGNED_USER = au.USERID 
    inner join USERS uc
    on t.CREATED_BY = uc.USERID
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 2013-07-08
      • 2019-11-28
      • 1970-01-01
      • 2014-05-11
      • 1970-01-01
      相关资源
      最近更新 更多