小编典典

为什么此SQL查询会导致“模棱两可的列名”错误?

sql

我有一个无法执行的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执行查询。

更新
此外,我尝试CreatedDateSELECT列列表中删除该列,然后查询不再需要。中的’p’别名ORDER BY。因此,该查询也可以正常工作:

select p.PersonID, * from dbo.Person p 
join dbo.PotentiallyFraudulentPeople pfp on p.PersonID= pfp.PersonID 
order by CreatedDate

阅读 306

收藏
2021-04-07

共1个答案

小编典典

CreatedDate两次选择该列。

  1. 明确地通过CreatedDate
  2. 隐式地通过*

它不知道您要对哪个事件进行排序-显然它没有意识到这两个事件都指向同一列。

2021-04-07