在 SQL 任何地方都找不到相关名称

correlation name not found on SQL Anywhere

我有两个 table,分别是 EmployeesSalarygroup。 PersonalID是Employees的主键,SalaryID是Salarygroup的主键。在 Employees table 中,还有一行名为 StartDat,它具有日期数据类型并跟踪员工开始在公司工作的日期。另外,AmountInEuros是员工每个月拿到的工资,它的数据类型是数字

我需要创建一个函数来计算员工到目前为止从公司收到的总金额,但是当我输入 PersonalID 时,我收到一条错误消息,显示 *Correlation name '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

也许您忘记使用您创建的别名 's' 引用第二个 table:

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

您已经为 table 指定了一个别名,因此您需要使用它。我建议为所有 tables:

使用别名
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.