web-dev-qa-db-ja.com

SQLiteでテーブルを結合するときにUPDATEを作成するにはどうすればよいですか?

私は試した :

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で構文エラーが発生します。

SQLiteバージョン3.5.9でこのUPDATE/JOINを機能させるにはどうすればよいですか?

91
e-satis

できません。 SQLite PDATEステートメントでのJOINをサポートしません

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

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

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

125
Andrew Watt

[〜#〜] 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
6
Lemberg