我在Users表上执行了以下测试SQL语句,并收到上述错误:
DELETE FROM Users
WHERE Username IS NOT 'Garikai' OR Username IS NOT 'Jane'
我不明白问题出在哪里,因为我显然没有在声明的任何部分使用MIN()聚合函数。我怀疑操纵数据库的软件部分存在错误(FWIW是SQLiteStudio 3.2.1),但我可能是错的。一些见识将不胜感激。
编辑:这是整个错误消息
[19:49:43]在数据库'g_im'上执行SQL查询时出错:滥用 聚合函数MIN()
答案 0 :(得分:1)
我认为您可能需要查询:
DELETE FROM Users
WHERE Username <> 'Garikai' AND Username <> 'Jane'
答案 1 :(得分:0)
由于@forpas和@CL在注释中正确理解,这是一个触发问题。因此,错误源于另一个表Groups
中的触发器,该触发器通过Users
表中的外键GroupMember
与Groups
表进行了引用链接。外键设置为级联删除与已删除的Users
用户名匹配的记录,从而激活Groups
表中的ON DELETE触发器。 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)