如何解决此SQL查询错误?
我得到这个错误: 无法绑定多部分标识符“dbo.Users.Id” 我的问题是:如何解决此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
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.UserIdExpensCategories.Id
JOIN
语法所取代,不鼓励使用。如果将这两种样式混合在一起,情况尤其糟糕——在逗号分隔的列表中有一些表,并对另一个联接使用适当的ANSI内部联接
。。我认为SQL Server会原谅不一致的命名。问题可能是隐式连接和显式连接的优先级@MartinSmith我认为你是正确的-我将修改我的答案。@MartinSmith你是正确的-更改表的顺序应该可以解决问题。