当前位置: 首页 > 面试题库 >

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

萧心水
2023-03-14
问题内容

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

问题答案:

CreatedDate两次选择该列。

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

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



 类似资料:
  • 这个查询有什么问题? 错误消息: PreparedStatementCallback;错误的SQL语法[选择u.id,u.user_id,count(不同的pf.id),IfNULL(upm.apprum_autoassign_enable,true)来自用户u内部连接user_roles-ur-on-ur.user_ id=u.id左外部连接user_preference_management-

  • 问题内容: public class Primitive { void m(Number b, Number … a) {} // widening, autoboxing->widening->varargs 我已经搜索过,发现加宽优先级比拆箱优先,因此在上述方法调用中,应该调用第一个方法,因为两个参数都相同。但这不会发生。你能解释一下吗? 问题答案: 它无法在JDK 1.5、1.6和1.7中进

  • 问题内容: 我正在编写一个PL / SQL过程,该过程需要动态生成一些查询,其中之一涉及使用来自查询的结果作为参数来创建临时表。 它可以正确编译,但是即使使用非常简单的查询,例如: IT抛出。如果我手动运行创建的查询,它将正确运行。在这一点上,我能够确定是什么导致了问题。 问题答案: 尝试丢掉“;” 从您立即执行的字符串内部。

  • 因此,我尝试在单个查询中,仅在行不存在的情况下插入行。 我的疑问如下: 有时(非常罕见,但仍然如此),它会生成以下错误: 违反主键约束“主键用户角色”。无法在对象“dbo”中插入重复键。用户的角色。重复的键值为(29851,1)。 是。下面是表的架构的完整SQL: 背景: 这是由托管在Apache服务器上的PHP脚本执行的,在数百次事件中,“随机”发生一次(很可能与并发相关)。 更多信息: 提供:

  • 我看到Databricks问题,但不理解 为什么使用 UDF 会导致笛卡尔积而不是完全外连接?显然,笛卡尔积将比完全外连接(Joins 就是一个例子)多得多的行,这是一个潜在的性能影响。 有什么方法可以在Databricks-Question中给出的示例中强制在笛卡尔积上进行外部连接? 此处引用Databricks问题: 我有一个使用SQLContext对流数据执行SQL语句的Spark Stre

  • 问题内容: 我正在尝试使用DB2运行一个简单的SQL语句,并且遇到了一些问题。我想在txt / db2文件中有一个脚本,并让引擎处理所有命令 这是脚本: 当我运行db2 -f / pathtofile时,我得到: 我究竟做错了什么?我的脚本有问题吗?另外,为什么没有“;”也能正常工作 我的陈述结尾处的终止符? 谢谢, 问题答案: 可能会有帮助, http://www.uc.edu/R/r25/do