Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在列别名上联接的SQL语法_Sql_Sql Server - Fatal编程技术网

在列别名上联接的SQL语法

在列别名上联接的SQL语法,sql,sql-server,Sql,Sql Server,在这种情况下,我需要在公共列名上连接表。我有一些SQL示例,显示了我正在尝试做的事情 declare @t table (assetid int) declare @x table (id int) insert into @t(assetid) values (1) insert into @t(assetid) values (2) insert into @t(assetid) values (3) insert into @x(id) values (1) insert into @

在这种情况下,我需要在公共列名上连接表。我有一些SQL示例,显示了我正在尝试做的事情

declare @t table (assetid int)
declare @x table (id int)

insert into @t(assetid) values (1)
insert into @t(assetid) values (2)
insert into @t(assetid) values (3)

insert into @x(id) values (1)
insert into @x(id) values (2)
insert into @x(id) values (3)

-- SUCCESS
select assetid as assetid
from @t t 
inner join @x x on x.id = t.assetid

-- FAIL
select assetid as EntityId
from @t t 
inner join @x x on x.id = t.EntityId  <-- syntax error
如何重写上面的FAIL部分,在这里我不能在表中的列名上连接,而是在该列名的别名上连接?

这样:

select EntityId
    from (select assetid as EntityId from @t) t 
    inner join @x x on x.id = t.EntityId  
这样:

select EntityId
    from (select assetid as EntityId from @t) t 
    inner join @x x on x.id = t.EntityId  
这样:

select EntityId
    from (select assetid as EntityId from @t) t 
    inner join @x x on x.id = t.EntityId  
这样:

select EntityId
    from (select assetid as EntityId from @t) t 
    inner join @x x on x.id = t.EntityId  

您需要使用CTE或内联视图子查询。滚动至SELECT语句的逻辑处理顺序


这与不能在WHERE子句中使用列别名,或者除ORDER BY子句外的任何其他地方使用列别名的原因相同。

您需要使用CTE或内联视图子查询。滚动至SELECT语句的逻辑处理顺序


这与不能在WHERE子句中使用列别名,或者除ORDER BY子句外的任何其他地方使用列别名的原因相同。

您需要使用CTE或内联视图子查询。滚动至SELECT语句的逻辑处理顺序


这与不能在WHERE子句中使用列别名,或者除ORDER BY子句外的任何其他地方使用列别名的原因相同。

您需要使用CTE或内联视图子查询。滚动至SELECT语句的逻辑处理顺序


这与不能在WHERE子句中使用列别名,或者在ORDER BY子句之外的任何其他地方使用列别名的原因相同。

为什么要这样做?为什么不直接从@t t internal join@x x on x.id=t.assetidYes中选择assetid作为EntityId,这就是上面的成功示例。我没有列出原因。我只是想知道“怎么做”。我确实有一个合理的理由来解释“为什么”。这不完全一样。有几种不同的“方法”,但与成功的例子相比,它们并不那么明显,至少在不知道“为什么”的情况下,你为什么要这么做?为什么不直接从@t t internal join@x x on x.id=t.assetidYes中选择assetid作为EntityId,这就是上面的成功示例。我没有列出原因。我只是想知道“怎么做”。我确实有一个合理的理由来解释“为什么”。这不完全一样。有几种不同的“方法”,但与成功的例子相比,它们并不那么明显,至少在不知道“为什么”的情况下,你为什么要这么做?为什么不直接从@t t internal join@x x on x.id=t.assetidYes中选择assetid作为EntityId,这就是上面的成功示例。我没有列出原因。我只是想知道“怎么做”。我确实有一个合理的理由来解释“为什么”。这不完全一样。有几种不同的“方法”,但与成功的例子相比,它们并不那么明显,至少在不知道“为什么”的情况下,你为什么要这么做?为什么不直接从@t t internal join@x x on x.id=t.assetidYes中选择assetid作为EntityId,这就是上面的成功示例。我没有列出原因。我只是想知道“怎么做”。我确实有一个合理的理由来解释“为什么”。这不完全一样。有几种不同的“方法”,但与成功的例子相比,它们并不那么明显,至少不知道“为什么”