我有以下疑问
DELETE FROM Item WHERE rowid IN (
SELECT rowid FROM ItemFts WHERE path = :path
)
其中ItemFts
是FTS 5表,它使用Item
表作为其外部内容。我的观察结果是查询执行了,但记录没有被删除。我已经确认以下两个查询都可以单独工作:
这将返回正确的rowid(例如1
):
SELECT rowid FROM Item WHERE path = :path
这将正确删除rowid = 1
处的记录:
DELETE FROM Item WHERE rowid IN (1)
我的问题发生在嵌套两个查询时。对于其他上下文,我使用SQLite的wasm OO API中的exec
方法。所以绑定看起来是这样的
db.exec(`
DELETE FROM Item WHERE rowid IN (
SELECT rowid FROM ItemFts WHERE path = :path
)
`, {bind: {":path": "some/path"}})
我的主要问题是,我不能告诉如果问题是在我的代码或它的问题与wasm库。SQLiteMaven可以帮助我吗?谢谢你!
更新
硬编码路径也可以工作,因此问题最有可能是在绑定中。
DELETE FROM Item WHERE rowid IN (
SELECT rowid FROM ItemFts WHERE path = 'some/hard/coded/path'
)
更新2
为遇到相同问题的任何人提供的解决方法
db.transaction(() => {
const rowids = db.selectValues("SELECT rowid FROM ItemFts WHERE path = :path", {
":path": path,
});
db.exec(`DELETE FROM Item WHERE rowid IN (${rowids.join(",")})`);
});
1条答案
按热度按时间cnjp1d6j1#
我刚刚发现这个问题是由于我不小心使用了API。我用这个:
而不是这样:
显然,我把
db.exec
和db.selectObjects
搞混了,后者的参数绑定签名更浅。