2017-05-02 61 views
-2

当我执行下面的查询:“不明确的列名”

select ProjectID, UserID, * 
from UserDetails 
where ProjectId='123456' 
order by UserID 

我得到“不明确的列名用户名”作为错误

然而,当我写的查询相同:

select ProjectID, UserID, * 
from UserDetails UD 
where ProjectId='123456' 
order by UD.UserID 

它不会引发任何错误。

有人可以解释为什么会发生这种情况吗?

+3

'*'扩展到所有列,其中包括另一个用户ID实例。 – jarlh

+0

您正在选择列两次...显式地通过UserID,隐式地通过* –

+0

@bub我明白你的观点。但是在第二个查询中也是如此。对? – Darshan

回答

1

这是因为您选择了两次列。使用通配符*选择所有列。第二个查询不会像您注意到的那样引发错误,因为您已经混淆了一组字段,因此与另一组字段没有重叠。

0

为了快速说明,UD.UserId的顺序在select中创建了别名。这就是为什么第二个查询不显示错误。因为该表已被指定。

+0

不完全。这里的别名是来自UserDetails UD的UD – warsong