加入表

时间:2015-07-02 19:45:01

标签: sql-server

我很难拉动userID加入这两个表。

我的目标是找到200以上的所有休假余额和所有活动用户ID,但我不断为userID获取不明确的列名。

我的查询确实有效,如果我尝试拉其他任何东西,但我想拉取UserID。任何有关我的查询的帮助将不胜感激。

这是我的表及其专栏:

USER

ID (PK)
UserID
Firstname
Lastname
Email
Active (Bool) 

余额

UserID (PK)
VacationBalance

以下是我的查询:

SELECT UserID FROM dbo.VacBal as I join dbo.User as T
on I.userid = T.userid 
WHERE VacationBalance > 200 and active = 1 

以下是我遇到的错误:

  

消息209,级别16,状态1,行1不明确的列名称'userid'。

4 个答案:

答案 0 :(得分:5)

由于每个表都包含tree.next列,因此您需要通过在O(log N)语句中包含表别名来指定您希望UserID的来源:

UserID

答案 1 :(得分:1)

SELECT T.UserID 
FROM dbo.VacBal as I 
join dbo.User as T
on I.userid = T.userid 
WHERE VacationBalance > 200 and active = 1

答案 2 :(得分:1)

试试这个:

SELECT UserID
  FROM dbo.VacBal AS I JOIN dbo.User AS T
         USING(userid)
 WHERE VacationBalance > 200 AND active = 1

答案 3 :(得分:0)

您遇到此错误的原因是当您加入两个或多个表时,它将为select提供一个公共记录集,而有多个列具有相同的名称,因此系统无法理解哪个值你想放在那里,这就是系统在列名错误信息中产生歧义的原因。

要避免此错误,请确保在列名称前面加上表名称或表别名,以便存在于多个表中的列。这是一个不会生成错误的更新的SELECT语句:

SELECT 
    T.UserID 
FROM dbo.VacBal as I 
    join dbo.User as T on I.userid = T.userid 
WHERE VacationBalance > 200 and active = 1 

最好始终使用表名或表别名为列名添加前缀,以便在将其他列添加到与另一个表中的现有列具有相同名称的表中时,您将不会遇到此错误