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

如何在连接SQLite上的表时进行更新?,sqlite,join,sql-update,Sqlite,Join,Sql Update,我试过: UPDATE closure JOIN item ON ( item_id = id ) SET checked = 0 WHERE ancestor_id = 1 以及: 两者都适用于MySQL,但它们在SQLite中给了我一个语法错误 如何使此更新/连接与SQLite 3.5.9版一起工作?您不能。SQLite 但是,您可能可以使用子查询来执行此操作: UPDATE closure SET checked = 0 WHERE item_id IN (SELECT id FR

我试过:

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

两者都适用于MySQL,但它们在SQLite中给了我一个语法错误

如何使此更新/连接与SQLite 3.5.9版一起工作?

您不能。SQLite

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

UPDATE closure SET checked = 0 
WHERE item_id IN (SELECT id FROM item WHERE ancestor_id = 1);
或者类似的东西;还不清楚您的模式到底是什么。

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

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

当您需要将一列从一个表复制到另一个表以反转关联的方向时,就会出现这种情况。在MySQL中,您可以执行以下操作:创建foos.bar\u id列,然后
更新bar.foo\u id=foos.id上的foos连接栏设置foos.bar\u id=bar.id
,然后删除bar.foo\u id列。。。在SQLite中如何实现这一点?如果有人知道,我肯定会用它。@hoff2实际上,这可能是最简单的方法。在我的例子中,我甚至不需要知道存在的部分:这已经由
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