如何解决此SQL查询错误?

如何解决此SQL查询错误?,sql,sql-server,Sql,Sql Server,我得到这个错误: 无法绑定多部分标识符“dbo.Users.Id” 我的问题是: Select dbo.Users.Name, SUM(dbo.IncomeCategories.YearEstimation - dbo.ExpensCategories.YearBudget) From Users, IncomeCategories inner join dbo.ExpensCategories on dbo.Users.Id = dbo.ExpensCat

我得到这个错误:

无法绑定多部分标识符“dbo.Users.Id”

我的问题是:

Select 
    dbo.Users.Name,
    SUM(dbo.IncomeCategories.YearEstimation - dbo.ExpensCategories.YearBudget)
From 
    Users, IncomeCategories
inner join 
    dbo.ExpensCategories on dbo.Users.Id = dbo.ExpensCategories.Id
where 
    Users.Id = 1

您能帮我解决吗?

您需要更改表格的顺序
JOIN
的优先级高于逗号,因此当编译器解析
JOIN
子句时,它尚未解析出
用户
表引用。您可以通过将
Users
表直接放在联接之前来解决此问题:

Select Users.Name,SUM(IncomeCategories.YearEstimation-ExpensCategories.YearBudget)
From IncomeCategories, Users
inner join ExpensCategories
on
Users.Id=ExpensCategories.Id
where Users.Id=1
其他(潜在)问题:

  • 在表引用中保持一致。在某些地方使用
    dbo.
    而不是在其他地方;可以在任何地方使用它(如果您需要使用
    dbo.
    ),也可以在任何地方使用它(如果您不需要)

  • 您没有定义与
    IncomeCategories
    表的关系,因此您将得到笛卡尔积(这可能是您想要的,但不清楚)

  • 你有一个没有分组依据的总和,因此除非你添加
    groupby Users.Name
    ,否则你会在那里得到一个错误

  • Users.Id
    加入
    ExpensCategories.Id
    似乎有些奇怪。我希望ExpensCategories.UserId


-在ANSI-92 SQL标准(20多年前)中,旧样式的逗号分隔表格列表样式被正确的ANSI
JOIN
语法所取代,不鼓励使用。如果将这两种样式混合在一起,情况尤其糟糕——在逗号分隔的列表中有一些表,并对另一个联接使用适当的ANSI
内部联接
。。我认为SQL Server会原谅不一致的命名。问题可能是隐式连接和显式连接的优先级@MartinSmith我认为你是正确的-我将修改我的答案。@MartinSmith你是正确的-更改表的顺序应该可以解决问题。