web-dev-qa-db-fra.com

Comment puis-je effectuer une mise à jour lors de la jonction de 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 puis-je faire en sorte que cette MISE À JOUR/JOIN fonctionne avec SQLite version 3.5.9?

91
e-satis

Tu ne peux pas. SQLite ne prend pas en charge JOINs 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; on ne sait pas exactement quel est votre schéma.

125
Andrew Watt

Vous pouvez également utiliser REMPLACER puis vous pouvez utiliser la sélection avec les 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
6
Lemberg