我有user
表user_id
作为primary key
user_id | name | email | deleted
1 | John | john@gmail.com | NULL
在其他一些表格中使用字段user_id
作为参考。
现在,当我想要删除用户时,我想delete
该行如果未在其他某些表格中使用,或update
(标记users.deleted=1
)(如果使用)
在这一刻,我是从两个序列中完成的,但我想从一个序列中完成。
我尝试CASE但没有机会......说"近CASE语法错误"
CASE
WHEN (SELECT count(resp_user_id) AS counter FROM equip WHERE user_id = 1) > 0
THEN (UPDATE users SET deleted = 1 WHERE user_id=1)
ELSE (DELETE FROM users WHERE user_id=1)
END
我写错了什么?
答案 0 :(得分:0)
SQLite是一个嵌入式数据库,即它被设计为与“真正的”编程语言一起使用。
SQLite本身没有这样的逻辑。您必须在程序中编写逻辑,并使用多个SQL语句:
cursor = db.execute("SELECT resp_user_id AS counter FROM equip WHERE user_id = ?", [id])
if not cursor.empty:
db.execute("UPDATE users SET deleted = 1 WHERE user_id = ?", [id])
else:
db.execute("DELETE FROM users WHERE user_id = ?", [id])
要使访问成为原子,请将它们包装到事务中。
答案 1 :(得分:0)
不是一个序列,但是以安全的方式命令可以是:
begin transaction;
delete from users where user_id=1 and ((select count(resp_user_id) from equip where resp_user_id = 1) = 0);
update users set deleted = 1 where user_id=1 and ((select count(resp_user_id) from equip where resp_user_id = 1) > 0);
end transaction;