我有一个无法执行的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
View 是对Person
表和其他一些表的查询,以确定我们是否信任某个人。 PotentiallyFraudulentPeople
View 只有一列:PersonID
。当我尝试执行此查询时,出现以下错误:
Msg 209, Level 16, State 1, Line 3
Ambiguous column name '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
View 甚至没有CreatedDate
列,所以我根本不明白为什么需要使用表别名。谁能解释这种奇怪的行为?
我正在使用SQL Server 2008和SSMS执行查询。
更新
另外,我尝试从
CreatedDate
列列表中删除SELECT
列,然后查询不再需要ORDER BY
中的'p'别名。因此,此查询同样适用:select p.PersonID, * from dbo.Person p
join dbo.PotentiallyFraudulentPeople pfp on p.PersonID= pfp.PersonID
order by CreatedDate
最佳答案
您要选择CreatedDate
列两次。
CreatedDate
显式表示。 *
隐式地进行。 它不知道您要对哪个事件进行排序-显然它没有意识到这两个事件都指向同一列。
关于sql - 为什么此SQL查询导致 “Ambiguous column name”错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16342271/