“循环引用引起的..“错误(但在 T-SQL 中不是)



>我有以下SQL语句,它在SQL Server 2012中返回所需的结果:

SELECT
    S.ONOMA
    , S.DIEY
    , S.POLH
    , S.TK
    , S.IDIOT
    , S.KODIKOS
    , S.AFM
FROM 
    SYNERG AS S
INNER JOIN 
    (SELECT
         G.AFM, MIN(KODIKOS) AS KODIKOS
     FROM SYNERG AS G
     WHERE LEN(ISNULL(AFM, '')) != 0
     GROUP BY AFM) AS I ON S.KODIKOS = I.KODIKOS
ORDER BY
    S.AFM

但是当我在MS Access 2007中运行相同的SQL语句时,出现错误:

由查询定义的 SELECT 列表中的"KODIKOS"引起的循环引用。

任何帮助将不胜感激。

正如HansUp的链接中所解释的那样:

计算字段

的别名不能与用于计算字段的任何字段名称相同。

这可能相当烦人(特别是如果它是查询返回的字段),但没有办法解决它。

因此,您需要更改别名,例如:

SELECT
    S.ONOMA
    , S.DIEY
    , S.POLH
    , S.TK
    , S.IDIOT
    , S.KODIKOS
    , S.AFM
FROM 
    SYNERG AS S
INNER JOIN 
    (SELECT
         G.AFM, MIN(KODIKOS) AS MinKODIKOS
     FROM SYNERG AS G
     WHERE LEN(Nz(AFM, '')) <> 0
     GROUP BY AFM) AS I ON S.KODIKOS = I.MinKODIKOS
ORDER BY
    S.AFM

另请注意,Access 中存在一个 IsNull() 函数,但具有不同的含义(它接受一个参数并返回一个布尔值)。相应的功能是Nz()

而且(谢谢@HansUp),不等运算符是<>,而不是!=。我也总是在SQL Server中使用<>,没有必要使事情变得过于复杂。:)

相关内容

最新更新