【问题标题】:Alias Logic in Sql Server 2005Sql Server 2005 中的别名逻辑
【发布时间】:2015-10-14 14:10:59
【问题描述】:

我在使用别名时总是发现问题。实际上我想使用表别名,这意味着复杂类型的别名。我不确定我的要求是否正确,或者我是否以正确的方式进行操作,但如果您能清除我对如何在查询中使用别名选择某些内容的疑问,将不胜感激。请忽略我的英语。

这是查询

select * 
from TBL 
where lng_TaskId not in 
      (select lng_TaskId 
       from Mask_Tasks MT 
       inner join Mask_TaskCategories MC on MT.lng_TaskCatID = MC.lng_taskCatid 
                                         and MT.lng_MajEqId = MC.lng_MajEqId) TBL

所以,我有一个子查询,它将首先运行给我一些 ID。现在我想使用它一个别名,然后想在我的外部或主查询中从这个别名中进行选择。您能否解释一下如何以这种方式使用别名或任何其他更好的方式在 SQL Server 中使用别名。我真的很感谢你。

【问题讨论】:

  • 如果没有匹配,你期望从查询中返回什么?样本数据和期望的结果确实有助于传达您正在尝试做的事情。

标签: sql sql-server tsql sql-server-2005


【解决方案1】:

如果你查询的是IN而不是NOT IN,那么你可以使用CROSS APPLY

select t.*, . . .
from TBL t CROSS APPLY
     (select lng_TaskId, . . .
      from Mask_Tasks MT inner join
           Mask_TaskCategories MC
           on MT.lng_TaskCatID = MC.lng_taskCatid and
              MT.lng_MajEqId = MC.lng_MajEqId
      where mt.lng_TaskId = t.lng_TaskId
     ) tt;

但是,NOT IN 您的请求没有意义。没有匹配项,因此“子查询”中的任何列都是NULL

注意:在上面,“...”意味着您可以放入自己的列。此外,tt 中的相关性是一种猜测。您应该始终限定列名,以便您和其他人知道您的查询在做什么。

【讨论】:

    猜你喜欢
    • 2010-11-28
    • 2013-03-08
    • 1970-01-01
    • 1970-01-01
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多