Existe-t-il des raisons pour lesquelles les UNION ne doivent pas être utilisés dans la clause WHERE des sous-requêtes de mise à jour? Ou d'ailleurs, même sélectionner des sous-requêtes normales?UNION dans la clause WHERE de la sous-requête de mise à jour
Existe-t-il un meilleur moyen de supprimer une telle requête? Notez que pour mon cas, l'UNION se traduira par un nombre d'enregistrements assez faible.
UPDATE mytable
set mytable.bla='xxx'
WHERE id IN (
SELECT id
FROM t1
INNER JOIN t2 ON t2.t1_id=t1.id
LEFT OUTER JOIN t3 ON t3.t1_id=t2.id
WHERE t2.id IN (1,2,3) AND t3.id IS NULL
UNION
SELECT id FROM t4
INNER JOIN t5 ON t5.id=t4.t5_id
LEFT OUTER JOIN t6 ON t6.t5_id=t5.id
WHERE t5.parent_id IN (1,2,3) AND t6.id IS NULL
);
UNION ALL peut-être? – jarlh
Un problème est que la sous-requête ne peut renvoyer qu'une seule valeur lors de l'utilisation d'égales - peut-être que vous voulez dire "in". Si cette requête devait aboutir à plusieurs enregistrements, elle serait erronée ... BTW - Je ne crois pas que cette requête soit corrélée puisqu'elle ne fait pas référence à 'mytable'. – sgeddes
@sgeddes Oui, après avoir vu votre commentaire, je suis d'accord qu'il n'est probablement pas corrélé en raison de votre raison donnée. Mais, reste à savoir si je devrais ou ne devrais pas mettre une requête dans la clause WHERE. Je pensais que quand on le fait, on ne devrait pas utiliser 'IN', mais' = 'comme je l'ai montré. Peut être pas? – user1032531