为什么此SQL查询会导致;“不明确的列名”;错误?
我有一个SQL查询无法执行:为什么此SQL查询会导致;“不明确的列名”;错误?,sql,sql-server,Sql,Sql Server,我有一个SQL查询无法执行: select p.PersonID, CreatedDate, * from dbo.Person p join dbo.PotentiallyFraudulentPeople pfp on p.PersonID= pfp.PersonID order by CreatedDate Person表的主键为PersonID(int)。PotentiallyFraudulentPeople视图是对Person表的查询,该表与其他一些表连接,以确定我们是否信任某个
select p.PersonID, CreatedDate, * from dbo.Person p
join dbo.PotentiallyFraudulentPeople pfp on p.PersonID= pfp.PersonID
order by CreatedDate
Person
表的主键为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
语句中使用“p”别名,而不是在SELECT
列列表中使用。此外,我完全不明白为什么需要使用表别名,因为潜在欺诈人员
视图甚至没有CreatedDate
列
有人能解释这种奇怪的行为吗
我正在使用SQLServer2008和SSMS执行查询
更新另外,我尝试从我的
SELECT
列列表中删除CreatedDate
列,然后查询不再需要orderby
中的“p”别名。因此,此查询也可以工作:
select p.PersonID, * from dbo.Person p
join dbo.PotentiallyFraudulentPeople pfp on p.PersonID= pfp.PersonID
order by CreatedDate
您将选择
CreatedDate
列两次
CreatedDate
*
隐式地它不知道您要对哪个事件进行排序,而且它显然没有意识到这两个事件都指向同一列。名称不明确的原因是order by子句允许使用别名,因此p.CreateDt和*.CreateDt都是CreateDt的别名。由于order by允许别名,因此无法解析您必须指定CreateDate来自哪个表。这意味着您在两个表中都有此列名。所以p.CreatedDate或pfp.CreatedDate 您可以将别名添加到“CreatedDate”并使用别名对其进行排序
select
p.PersonID,
CreatedDate [create_date],
*
from
dbo.Person p join
dbo.PotentiallyFraudulentPeople pfp on p.PersonID= pfp.PersonID
order by
[create_date]
这听起来像是SQL Server的奇怪行为,但它解释了我的问题。谢谢我会尽快接受这个答案。只是有这个问题,这就是原因,我没有意识到这是订单的问题。顺便说一下,你在回答一个4年前回答的问题。回答时请记住发帖日期。