我有一个无法执行的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。
Person
PersonID
PotentiallyFraudulentPeople
当我尝试执行此查询时,出现以下错误:
消息209,级别16,状态1,第3 行列名称“ CreatedDate”不明确。
我知道这个错误告诉我CreatedDate列名是不明确的,我需要在表的别名’p’开头。
CreatedDate
该查询有效:
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列。
ORDER BY
SELECT
谁能解释这种奇怪的行为?
我正在使用SQL Server 2008和SSMS执行查询。
更新 此外,我尝试CreatedDate从SELECT列列表中删除该列,然后查询不再需要。中的’p’别名ORDER BY。因此,该查询也可以正常工作:
select p.PersonID, * from dbo.Person p join dbo.PotentiallyFraudulentPeople pfp on p.PersonID= pfp.PersonID order by CreatedDate
您CreatedDate两次选择该列。
*
它不知道您要对哪个事件进行排序-显然它没有意识到这两个事件都指向同一列。