93

私は試した :

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 で動作させるにはどうすればよいですか?

4

2 に答える 2

130

できません。SQLiteは UPDATE ステートメントでの JOIN をサポートしていません

ただし、代わりにサブクエリを使用してこれを行うことができます。

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

またはそのようなもの; あなたのスキーマが何であるかは明確ではありません。

于 2009-04-21T19:51:23.357 に答える
7

REPLACEを使用してから、結合で選択を使用することもできます。このような:

REPLACE INTO closure 
 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
于 2016-01-13T12:19:49.223 に答える