>我有以下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中使用<>
,没有必要使事情变得过于复杂。:)