【问题标题】:How to reference the same column from 2 seperate IDs SQL Server如何从 2 个单独的 ID SQL Server 引用同一列
【发布时间】:2017-06-13 12:38:08
【问题描述】:

我一直在四处寻找无法找到有效的答案,所以,我希望有人可以帮助我解决这个问题。基本上我有一个带有 User_id 和 delegate_id 的表,但是显然两者都引用了同一个 user_mstr 表。但我想要的是用户和代表的名字。

这是我的查询部分:

SELECT u.first_name, u.last_name, delegate_user_id, delegate_provider_ind, 
       tasks_ind, workflow_use_always_ind
FROM workflow_user_delegates ud
LEFT OUTER JOIN user_mstr u ON ud.user_id=u.user_id

但我希望将 delegate_id 更改为名称,但显然我已经引用了用户的名字和姓氏。

确切的软件是 SQL Server 2008。谢谢!

【问题讨论】:

  • 感谢所有提供帮助的人!令我惊讶的是答案相当简单,但仍然无法让它为我工作。
  • 很高兴我们能够提供帮助。请将最能帮助您解决问题的答案标记为已接受。

标签: sql sql-server sql-server-2008 join nested


【解决方案1】:

您可以使用alias = expression 或expression AS alias 为列名设置别名。

select 
    u.first_name
  , u.last_name
  , delegate_user_id
  , delegate_first_name = d.first_name
  , delegate_last_name = d.lastname
  , delegate_provider_ind
  , tasks_ind
  , workflow_use_always_ind
from workflow_user_delegates ud
  left join user_mstr u on ud.user_id = u.user_id
  left join user_mstr d on ud.delegate_user_id = d.user_id

【讨论】:

  • 完美!非常感谢
  • @Cavin 乐于助人!
【解决方案2】:

你需要一个额外的LEFT JOIN:

SELECT u.first_name AS user_first_name, u.last_name AS user_last_name, 
       d.first_name AS delegate_first_name, d.last_name AS delegate_last_name, 
       delegate_user_id, delegate_provider_ind, 
       tasks_ind, workflow_use_always_ind
FROM workflow_user_delegates ud
LEFT OUTER JOIN user_mstr u ON ud.user_id=u.user_id
LEFT OUTER JOIN user_mstr d ON ud.delegate_user_id=d.user_id

【讨论】:

  • 很好,正要指出您的第二个连接引用了u.user_id
【解决方案3】:

您可以将同一个表连接两次,只需为该表提供不同的别名。像这样的:

....
FROM workflow_user_delegates ud
LEFT OUTER JOIN user_mstr u ON ud.user_id=u.user_id
LEFT OUTER JOIN user_mstr d ON ud.delegate_id=d.user_id

因此,SELECT 中对u.[...] 的任何引用都将引用基于user_id 加入的那个,而对d.[...] 的任何引用都将引用基于delegate_id 的那个。


要区分SELECT 子句中的列,请使用类似的别名方法。像这样的:

SELECT
    ....
    u.first_name AS user_first_name,
    u.last_name AS user_last_name,
    d.first_name AS delegate_first_name,
    d.last_name AS delegate_last_name,
    ....

【讨论】:

  • 第二次加入应该引用d.user_id
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-23
  • 2015-09-04
  • 2011-10-20
  • 2015-08-07
相关资源
最近更新 更多