Ошибка «неправильное использование агрегатной функции MIN ()» при попытке удалить строки из таблицы - PullRequest
0 голосов
/ 09 января 2019

Я выполнил следующую тестовую инструкцию SQL для своей таблицы Users и получил вышеупомянутую ошибку:

DELETE FROM Users
WHERE Username IS NOT 'Garikai' OR Username IS NOT 'Jane'

Я не понимаю, откуда возникает проблема, поскольку у меня явно нет агрегатной функции MIN () ни в одной части моего оператора. Я подозреваю ошибку со стороны программного обеспечения, манипулирующего базой данных (FWIW это SQLiteStudio 3.2.1), но я могу ошибаться. Некоторые идеи будут оценены.

РЕДАКТИРОВАТЬ: Вот все сообщение об ошибке

[19:49:43] Ошибка при выполнении SQL-запроса к базе данных «g_im»: неправильное использование агрегатной функции MIN ()

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Как правильно заметили @forpas и @CL в комментариях, это была проблема триггера. Таким образом, ошибка была вызвана триггером в другой таблице, Groups, которая была ссылочно связана с таблицей Users через внешний ключ GroupMember в таблице Groups. Внешний ключ был установлен для каскадного удаления записей, соответствующих удаленному имени пользователя Users, и, следовательно, активации триггера ON DELETE в таблице Groups. Триггер DELETE имел агрегатную функцию MIN() в своем предложении WHERE, из-за чего в SQLite явно запрещено иметь агрегатные функции в предложении WHERE - отсюда и сообщение об ошибке. Вот оригинальный код триггера (простите и за логические дыры в коде):

UPDATE Group_Members
SET Role = 'Admin'
WHERE JoinDate = MIN(JoinDate) AND GroupName = OLD.GroupName

Вот как я наконец исправил ситуацию:

UPDATE Group_Members
SET Role = 'Admin'
WHERE JoinDate = (SELECT MIN(JoinDate) FROM Group_Members WHERE GroupName = OLD.GroupName)
0 голосов
/ 09 января 2019

Я думаю, что вы, вероятно, хотите запрос:

DELETE FROM Users
WHERE Username <> 'Garikai' AND Username <> 'Jane'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...