“由SQL引起的循环引用”错误在Access SQL中(但不在T-SQL中)

时间:2016-01-14 13:28:06

标签: sql ms-access ms-access-2007

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

YEAR     SP  IA
2006     Aglais io (Linnaeus, 1758)  82.32
2007     Aglais io (Linnaeus, 1758)  78.79
2008     Aglais io (Linnaeus, 1758)  79.29
2009     Aglais io (Linnaeus, 1758)  135.35
2010     Aglais io (Linnaeus, 1758)  81.82
2014     Aglais io (Linnaeus, 1758)  51.26
2001     Aglais io (Linnaeus, 1758)  0.00
2002     Aglais io (Linnaeus, 1758)  0.00
2003     Aglais io (Linnaeus, 1758)  0.00
2004     Aglais io (Linnaeus, 1758)  0.00
2005     Aglais io (Linnaeus, 1758)  0.00
2011     Aglais io (Linnaeus, 1758)  0.00
2012     Aglais io (Linnaeus, 1758)  0.00
2013     Aglais io (Linnaeus, 1758)  0.00

levels(DF) (original)
2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014
levels(DF1) (subset)
2006 2007 2008 2009 2010 2014
levels(DF2) (recovered)
2006 2007 2008 2009 2010 2014 2001 2002 2003 2004 2005 2011 2012 2013

但是当我在MS Access 2007中运行相同的SQL语句时,我收到一个错误:

  

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

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

正如汉斯的link所述:

  

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

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

所以你需要改变别名,例如:

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中使用<>,不需要使事情变得更复杂。 :)