在 Sqlite 中使用 WHERE NOT EXISTS 返回语法错误

Posted

技术标签:

【中文标题】在 Sqlite 中使用 WHERE NOT EXISTS 返回语法错误【英文标题】:Using WHERE NOT EXISTS in Sqlite returns syntax error 【发布时间】:2021-06-13 01:44:35 【问题描述】:

(这与使用 Discord.js 和 sqlite v3,而不是 sqlite3 的 Discord 机器人有关) 我目前正在尝试使用 WHERE NOT EXISTS 向我的 Sqlite 表添加一行,但前提是没有“serverid”是当前服务器的 ID 并且类型为 spam 的行。

我试过了:

sql.run(`INSERT INTO filters WHERE NOT EXISTS(SELECT 1 FROM filters WHERE serverid = "$msg.guild.id" AND type = "Spam") (serverid, type, active, action, time) VALUES (?, ?, ?, ?, ?)`, msg.guild.id, `Spam`, 0, `delete`, 60)

如果没有具有该 ID 和类型的行,则此方法有效,但一旦存在,我就会收到“语法错误:WHERE”。 它没有告诉我问题出在哪里,我多次检查语法,应该没问题。 这在sqlite中不起作用吗?还是我语法错误?

【问题讨论】:

【参考方案1】:

查询的语法错误。 你应该使用INSERT ... SELECT 而不是INSERT ... VALUES

INSERT INTO filters (serverid, type, active, action, time)
SELECT ?, ?, ?, ?, ?
WHERE NOT EXISTS(SELECT 1 FROM filters WHERE serverid = "$msg.guild.id" AND type = "Spam")`

【讨论】:

这很奇怪,我在项目的其他任何地方都使用我的原始语法,它工作得很好。不过谢谢,解决了!

以上是关于在 Sqlite 中使用 WHERE NOT EXISTS 返回语法错误的主要内容,如果未能解决你的问题,请参考以下文章

在 Sqlite 中更新顶部

SQLite基础-7.子句

使用 WHERE 子句的 SQLite 更新和增量

更新 SQLite - “WHERE”附近:语法错误(代码 1 SQLITE_ERROR):

《SQLite3 — 子句》

在 sqlite 中查询 Where 子句的结果