Как сделать обновление при соединении таблиц на 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.

Как я могу сделать это обновление / JOIN работает с SQLite версии 3.5.9 ?

2 88

2 ответа:

вы не можете. 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