Sql Access 2003:计数(*)产生语法错误

Sql Access 2003:计数(*)产生语法错误,sql,ms-access,Sql,Ms Access,我正在使用ms access,由于某种原因,这里的代码产生了一个语法错误,我不理解 UPDATE Korrekturentlastung SET Schueler = SELECT COUNT(*) FROM Korrekturentlastung WHERE Korrekturentlastung_Kurs.Kuerzel = Korrekturentlastung.Kuerzel AND Korrekturentlastung_Kurs.Klasse =

我正在使用ms access,由于某种原因,这里的代码产生了一个语法错误,我不理解

UPDATE Korrekturentlastung
SET Schueler = SELECT COUNT(*)
    FROM Korrekturentlastung 
    WHERE 
        Korrekturentlastung_Kurs.Kuerzel = Korrekturentlastung.Kuerzel
AND Korrekturentlastung_Kurs.Klasse = Korrekturentlastung.Klasse
AND Korrekturentlastung_Kurs.Fach = Korrekturentlastung.Fach
AND Korrekturentlastung_Kurs.Kursart = Korrekturentlastung.Kursart
错误是:

Syntax error. in query expression 'SELECT COUNT(*)
    FROM Korrekturentlastung'

子查询需要自己的括号:

UPDATE Korrekturentlastung
SET Schueler = (SELECT COUNT(*)
                FROM Korrekturentlastung 
                WHERE Korrekturentlastung_Kurs.Kuerzel = Korrekturentlastung.Kuerzel
AND Korrekturentlastung_Kurs.Klasse = Korrekturentlastung.Klasse
AND Korrekturentlastung_Kurs.Fach = Korrekturentlastung.Fach
AND Korrekturentlastung_Kurs.Kursart = Korrekturentlastung.Kursart
              );

虽然@Gordon Linoff已正确识别了查询中的语法错误,但如果要在MS Access中运行查询,您可能会收到熟悉的响应:

操作必须使用可更新的查询

这是由于MS Access使用的JET数据库引擎受到限制,因此
更新
查询的任何部分都不能使用聚合。在您的情况下,这是由于使用了
count(*)

一种可能的替代方法是使用域聚合函数,该函数的计算与主查询的计算是分开的,因此保留了查询的“可更新性”

update korrekturentlastung
set schueler = 
dcount
(
    "*",
    "Korrekturentlastung",
    "Kuerzel = " & Korrekturentlastung.Kuerzel & " and "
    "Klasse = " & Korrekturentlastung.Klasse & " and " 
    "Fach = " & Korrekturentlastung.Fach & " and "
    "Kursart = " & Korrekturentlastung.Kursart
)
请注意,如果字段是文本字段,则还需要用单引号或双引号将上述值括起来,例如:

update korrekturentlastung
set schueler = 
dcount
(
    "*",
    "Korrekturentlastung",
    "Kuerzel = '" & Korrekturentlastung.Kuerzel & "' and "
    "Klasse = '" & Korrekturentlastung.Klasse & "' and " 
    "Fach = '" & Korrekturentlastung.Fach & "' and "
    "Kursart = '" & Korrekturentlastung.Kursart & "'"
)