Sql 获得';滥用聚合函数MIN()';尝试从表中删除行时出错

Sql 获得';滥用聚合函数MIN()';尝试从表中删除行时出错,sql,database,sqlite,Sql,Database,Sqlite,我在Users表上执行了以下测试SQL语句,并得到了上述错误: DELETE FROM Users WHERE Username IS NOT 'Garikai' OR Username IS NOT 'Jane' 我不明白问题是从哪里来的,因为我的语句的任何部分都没有MIN()聚合函数。我怀疑操作数据库的软件有一个bug(FWIW,它是SQLiteStudio 3.2.1),但我可能错了。如能提供一些见解,将不胜感激 编辑:这是整个错误消息 [19:49:43]对数据库“g_im”执行SQL

我在Users表上执行了以下测试SQL语句,并得到了上述错误:

DELETE FROM Users
WHERE Username IS NOT 'Garikai' OR Username IS NOT 'Jane'
我不明白问题是从哪里来的,因为我的语句的任何部分都没有MIN()聚合函数。我怀疑操作数据库的软件有一个bug(FWIW,它是SQLiteStudio 3.2.1),但我可能错了。如能提供一些见解,将不胜感激

编辑:这是整个错误消息

[19:49:43]对数据库“g_im”执行SQL查询时出错:误用 聚合函数的最小值()


我认为您可能希望查询:

DELETE FROM Users
WHERE Username <> 'Garikai' AND Username <> 'Jane'
从用户中删除
其中用户名“Garikai”和用户名“Jane”

正如@forpas和@CL在评论中正确地直觉所示,这是一个触发问题。因此,错误源于另一个表
Groups
中的触发器,该表通过
Groups
表中的外键
GroupMember
引用链接到
Users
表。外键被设置为级联删除与已删除的
用户
用户名匹配的记录,从而激活
表中的ON DELETE触发器。DELETE触发器在其
WHERE
子句中有aggregate
MIN()
函数——在SQLite中,在
WHERE
子句中有aggregate函数显然是非法的——因此出现了错误消息。以下是原始触发器代码(请原谅代码中的逻辑漏洞):

以下是我最终解决问题的方法:

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

你能回答这个问题,包括你收到的错误信息的确切措辞吗?其中可能有一些细节对您来说意义不大,但可以帮助其他人理解问题。上面的查询(如果可行)将删除表中的所有行。
WHERE
子句中的过滤条件始终为true。您可能希望使用
而不是
。错误消息与delete sql语句无关,除非表中附加了触发器或任何其他约束。显示
Users
表中的所有触发器。正如我所说,此错误消息与此语句无关。我还在SQLiteStudio 3.2.1中复制了它,它工作得很好。一定是你在做别的事情触发了这个错误。我同意你的观点,刺穿者,但这并不能解释奇怪的错误信息。
WHERE
逻辑上应该有另一个问题,但仍然是相同的消息
UPDATE Group_Members
SET Role = 'Admin'
WHERE JoinDate = (SELECT MIN(JoinDate) FROM Group_Members WHERE GroupName = OLD.GroupName)