имя корреляции не найдено в SQL Anywhere - PullRequest
0 голосов
/ 15 января 2019

У меня есть две таблицы с именами Сотрудники и Salarygroup . PersonalID является первичным ключом сотрудников и SalaryID является первичным ключом Salarygroup. Внутри таблицы Employees есть еще одна строка с именем StartDat , которая имеет тип данных date и отслеживает дату, когда сотрудник начал работать в компании. Кроме того, AmountInEuros - это заработная плата, которую сотрудник получает каждый месяц, и она имеет числовой тип данных

Мне нужно создать функцию, которая будет подсчитывать общую сумму денег, которую сотрудник уже получил от компании, но когда я ввожу PersonalID, я получаю сообщение об ошибке: * Имя корреляции 'Salarygroup' не найдено.

Может ли кто-нибудь, черт побери, понять, почему это происходит?

  ALTER FUNCTION "dba"."countTotalAmountOfMoney"(@PersonalID int)
   RETURNS int
   AS
   BEGIN
   DECLARE @totalAmountOfMoney int;
   SELECT  @totalAmountOfMoney = g.AmountInEuros * DATEDIFF(month, g.StartDat, 
        '2019-01-16') 
   FROM dba.Employees 
   Inner Join dba.Salarygroup s
   ON   dba.Employees.SalaryId = dba.Salarygroup.SalaryId

   RETURN @totalAmountOfMoney;
END

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Вы дали таблице псевдоним, поэтому вам нужно его использовать. Я бы порекомендовал использовать псевдонимы для всех таблиц:

DECLARE @totalAmountOfMoney int;

SELECT @totalAmountOfMoney = s.AmountInEuros * DATEDIFF(month, e.StartDat, '2019-01-16') 
FROM dba.Employees e INNER JOIN
     dba.Salarygroup s
     ON e.SalaryId = s.SalaryId
WHERE e.personalID = @PersonalID;

Обратите внимание, что псевдоним g не определен в вашем запросе. StartDat происходит от Employees, поэтому я изменил это на e. Я предполагаю, что AmountInEuros происходит от s.

0 голосов
/ 15 января 2019

Возможно, вы забыли сослаться на вторую таблицу, используя созданные вами псевдонимы:

ALTER FUNCTION "dba"."countTotalAmountOfMoney"(@PersonalID int)
   RETURNS int
   AS
   BEGIN
   DECLARE @totalAmountOfMoney int;
   SELECT  @totalAmountOfMoney = g.AmountInEuros * DATEDIFF(month, g.StartDat, 
        '2019-01-16') 
   FROM dba.Employees 
   Inner Join dba.Salarygroup s
   ON   dba.Employees.SalaryId = s.SalaryId

   RETURN @totalAmountOfMoney;
END
...