【发布时间】:2013-05-02 15:43:47
【问题描述】:
我有一个无法执行的 SQL 查询:
select p.PersonID, CreatedDate, * from dbo.Person p
join dbo.PotentiallyFraudulentPeople pfp on p.PersonID= pfp.PersonID
order by CreatedDate
Person 表的 PK 为 PersonID (int)。 PotentiallyFraudulentPeople 视图是对 Person 表的查询,它与其他一些表连接以确定我们是否信任某个人。 PotentiallyFraudulentPeople 视图只有一列:PersonID。
当我尝试执行此查询时,我收到此错误:
消息 209,第 16 级,状态 1,第 3 行
不明确的列名“CreatedDate”。
我知道这个错误告诉我CreatedDate 列名不明确,我需要在它前面加上表的别名“p”。
此查询有效:
select p.PersonID, CreatedDate, * from dbo.Person p
join dbo.PotentiallyFraudulentPeople pfp on p.PersonID= pfp.PersonID
order by p.CreatedDate
我不明白为什么我需要在ORDER BY 语句而不是SELECT 列列表中使用“p”别名。另外,我不明白为什么我需要使用表别名,因为 PotentiallyFraudulentPeople 视图甚至没有 CreatedDate 列。
谁能解释这种奇怪的行为?
我正在使用 SQL Server 2008 和 SSMS 来执行查询。
更新
另外,我尝试从SELECT 列列表中删除CreatedDate 列,然后查询不再需要ORDER BY 中的“p”别名。所以这个查询也有效:
select p.PersonID, * from dbo.Person p
join dbo.PotentiallyFraudulentPeople pfp on p.PersonID= pfp.PersonID
order by CreatedDate
【问题讨论】:
标签: sql sql-server