如何在SQLite上连接表时进行更新?

e-s*_*tis 92 sqlite join sql-update

我试过了 :

UPDATE closure JOIN item ON ( item_id = id ) 
SET checked = 0 
WHERE ancestor_id = 1
Run Code Online (Sandbox Code Playgroud)

和:

UPDATE closure, item 
SET checked = 0 
WHERE ancestor_id = 1 AND item_id = id
Run Code Online (Sandbox Code Playgroud)

两者都适用于MySQL,但那些在SQLite中给我一个语法错误.

如何使这个UPDATE/JOIN与SQLite版本3.5.9一起使用?

And*_*att 127

你不能.SQLite 不支持UPDATE语句中的JOIN.

但是,您可以使用子查询来执行此操作:

UPDATE closure SET checked = 0 
WHERE item_id IN (SELECT id FROM item WHERE ancestor_id = 1);
Run Code Online (Sandbox Code Playgroud)

或类似的东西; 目前还不清楚你的架构究竟是什么.

  • 当你需要做的是将一列从一个表复制到另一个表以便反转关联的方向时.在MySQL中你可以做些什么,比如创建foos.bar_id列,然后`更新foos连接吧吧.foo_id = foos.id设置foos.bar_id = bars.id`,然后删除bars.foo_id列......怎么可以在SQLite中完成?如果有人知道,我可以肯定地使用它. (20认同)

Rom*_*ych 6

您也可以使用REPLACE,然后您可以使用连接选择.像这样:

REPLACE INTO clusure 
 SELECT sel.col1,sel.col2,....,sel.checked --checked should correspond to column that you want to change
FROM (
 SELECT *,0 as checked FROM closure LEFT JOIN item ON (item_id = id) 
 WHERE ancestor_id = 1) sel
Run Code Online (Sandbox Code Playgroud)