Как сделать ОБНОВЛЕНИЕ при объединении таблиц на SQLite? - PullRequest
90 голосов
/ 21 апреля 2009

Я пытался:

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?

Ответы [ 2 ]

123 голосов
/ 21 апреля 2009

Вы не можете. SQLite не поддерживает соединения в операторах UPDATE .

Но вы, вероятно, можете сделать это с помощью подзапроса:

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

Или что-то в этом роде; не совсем понятно, какая у вас схема.

6 голосов
/ 13 января 2016

Вы также можете использовать ЗАМЕНА , тогда вы можете использовать выбор с объединениями. Как это:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...