Comment puis-je créer une mise à jour en joignant des tables sur SQLite?

J’ai essayé :

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

Et:

 UPDATE closure, item SET checked = 0 WHERE ancestor_id = 1 AND item_id = id 

Les deux fonctionnent avec MySQL, mais ceux-ci me donnent une erreur de syntaxe dans SQLite.

Comment faire fonctionner UPDATE / JOIN avec SQLite version 3.5.9?

Vous ne pouvez pas SQLite ne prend pas en charge les JOIN dans les instructions UPDATE .

Mais, vous pouvez probablement le faire avec une sous-requête à la place:

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

Ou quelque chose comme ça; Ce n’est pas clair exactement quel est votre schéma.

Vous pouvez également utiliser REPLACE pour pouvoir utiliser la sélection avec des jointures. Comme ça:

 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