Вам необходимо изменить порядок ваших таблиц; JOIN
имеет более высокий приоритет, чем запятая, поэтому, когда компилятор анализирует предложение JOIN
, он еще не разобрал справочную таблицу Users
. Вы можете исправить это, поставив Users
таблицу непосредственно перед JOIN:
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
, поэтому вы получите декартовую продукцию (которая может быть тем, что вы хотите, но это не ясно).
У вас есть СУМ без GROUP BY, поэтому вы получите сообщение об ошибке там, если вы не добавите GROUP BY Users.Name
.
Присоединение Users.Id
к ExpensCategories.Id
кажется странным. Я бы ожидать ExpensCategories.UserId
или что-то
[Плохие привычки пинать: использование старого стиля JOIN и] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits- to-kick-using-old-style-joins.aspx) - этот стиль таблиц * в стиле старого стиля * разделен запятыми * был заменен на * правильный * ANSI 'JOIN' синтаксис в ANSI - ** 92 ** SQL Стандарт (** более 20 лет ** назад), и его использование не рекомендуется. Это особенно ** плохо, если вы * смешиваете два стиля *, как и вы, - используйте некоторые таблицы в списке, разделенном запятыми, и используйте правильный ANSI 'INNER JOIN' для другого объединения .... –