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

我试过了 :

UPDATE closure JOIN item ON ( item_id = id ) SET checked = 0 WHERE ancestor_id = 1 

和:

 UPDATE closure, item SET checked = 0 WHERE ancestor_id = 1 AND item_id = id 

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

我怎样才能使这个UPDATE / JOIN与SQLite版本3.5.9一起工作?

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

但是,你可以用一个子查询来代替:

 UPDATE closure SET checked = 0 WHERE item_id IN (SELECT id FROM item WHERE ancestor_id = 1); 

或类似的东西; 目前还不清楚你的模式是什么。

您也可以使用REPLACE,然后您可以使用连接进行select。 喜欢这个:

 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