我有一个无法执行的 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 来执行查询。
更新
另外,我尝试CreatedDate
从SELECT
列列表中删除该列,然后查询不再需要ORDER BY
. 所以这个查询也有效:
select p.PersonID, * from dbo.Person p
join dbo.PotentiallyFraudulentPeople pfp on p.PersonID= pfp.PersonID
order by CreatedDate