Access 2003: count (*) выдает синтаксическую ошибку - PullRequest
0 голосов
/ 11 февраля 2020

Я использую 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'

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

Хотя @Gordon Linoff правильно определил синтаксическую ошибку в вашем запросе, если вы запустите запрос в MS Access, вы, скорее всего, получите знакомый ответ:

Операция должна использовать обновляемый запрос.

Это возникает в результате ограничения базы данных JET, используемой MS Access, когда ни одна часть запроса update не может использовать агрегацию. В вашем случае это возникает в результате использования count(*).

. Одна из возможных альтернатив - использовать агрегатную функцию домена DCount, которая оценивается отдельно от оценки. основного запроса и, следовательно, сохраняет «обновляемость» запроса.

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 & "'"
)
0 голосов
/ 11 февраля 2020

Подзапросам нужны свои круглые скобки:

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
              );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...