Je pense que vous voulez une sous-requête corrélée :
UPDATE ordersperformers op
SET op.Status = 1
WHERE op.Status = 0 AND
op.Orders_Id = @v_order_id AND
op.Users_Id = @v_user_id AND
EXISTS (SELECT 1
FROM orders o
WHERE o.id = op.Orders_Id AND
NOW() <= DATE_SUB(o.DeliveryDate, INTERVAL 2 HOUR) AND
o.Status = 0
);
J'ai changé/corrigé un tas d'autres choses :
- Les alias de table facilitent l'écriture et la lecture de la requête.
- Les backticks rendent la requête plus difficile à écrire et à lire.
- Les conditions uniquement sur la table en cours de mise à jour doivent être dans le
WHERE
extérieur , pas leWHERE
interne . - Définir des variables dans un
EXISTS
la sous-requête n'a tout simplement pas de sens.EXISTS
teste si lignes exister. Logiquement, il pourrait s'exécuter sans jamais évaluer leSELECT
.