日期:2014-05-18  浏览次数:22279 次

无法绑定由多个部分组成的标识符。
SQL code
select q.Id,q.Title
from 
(
select 
q.Id,q.Title,ROW_NUMBER() over(order by q.PostTime desc) as row 
from Question q inner join Answer a on q.BestAnswerId=a.Id
) 
a where row between 1 and 5



提示错误:
消息 4104,级别 16,状态 1,第 1 行
无法绑定由多个部分组成的标识符 "q.Id"。
消息 4104,级别 16,状态 1,第 1 行
无法绑定由多个部分组成的标识符 "q.Title"。

改成这样就可以了
SQL code

select Id,Title
from 
(select 
q.Id,q.Title,ROW_NUMBER() over(order by q.PostTime desc) as row 
from Question q inner join Answer a on q.BestAnswerId=a.Id
) 
a where row between 1 and 5



这是什么原因呢。


------解决方案--------------------
SQL code

select q.Id,q.Title
from 
(
select 
q.Id,q.Title,ROW_NUMBER() over(order by q.PostTime desc) as row 
from Question q inner join Answer a on q.BestAnswerId=a.Id
) 
a --这里起的别名是 q,上方select 用的是q
where row between 1 and 5

------解决方案--------------------
作为外表的a表,没有必要用q.id,q表是内表,你在外面也访问不到得。
------解决方案--------------------
子查询在里面能用外面的别名。但不能在外面用子查询里面的别名

SQL code
select * from tb1 a
where not exists
(select * from tb2 b join b.id=a.id)--子查询在里面能用外面的别名。

select * from a on a.id=b.id