在 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 返回语法错误的主要内容,如果未能解决你的问题,请参考以下文章