给出下表:
acl (acl_id integer, name character)
ace (acl_id integer, users_id integer)
users (users_id integer, login character)
以及一些示例数据:
acl (0, 'view') (1, 'sell'), (2, 'void')
ace (0, 9), (1, 9), (2, 9), (0, 8)
users (8, 'joe') (9, 'john')
我尝试了以下操作:
DELETE FROM ace
WHERE ace.acl_id = acl.acl_id AND acl.name = ?
AND ace.users_id = users.users_id AND users.login = ?
但是在 sqlite3_prepare_v2()
中失败,并显示 SQLITE_ERROR“没有这样的列:acl.acl_id”(这不是很有帮助)
我得到了相同的结果:
DELETE FROM ace
WHERE acl_id = acl.acl_id AND acl.name = ?
AND users_id = users.users_id AND users.login = ?
值得庆幸的是,可怕的是:
DELETE FROM ace,acl,users
WHERE ace.acl_id = acl.acl_id AND acl.name = ?
AND ace.users_id = users.users_id AND users.login = ?
因第一个逗号出现语法错误而失败。
如果我足够将值“sell”和“john”绑定(bind)到参数,并逐步执行查询,那么我希望删除 ace 表的 (1, 9) 行。
是否可以在不先执行两次 SELECT 来获取 acl_id 和 users_id 值的情况下完成此操作?
最佳答案
在评论中链接的问答的帮助下,我能够提出看起来像功能性查询的内容:
DELETE FROM ace
WHERE acl_id = (
SELECT acl_id
FROM acl
WHERE name = ?
)
AND users_id = (
SELECT users_id
FROM users
WHERE login = ?
)
我不得不说,这太荒谬了。
“SQL,查询语言的 EBCDIC”
关于c - 如何使用引用多个表的 WHERE 子句删除 sqlite 中的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56159119/