Mysql
 sql >> Base de données >  >> RDS >> Mysql

Table spécifiée deux fois dans la procédure, comment corriger ?

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 le WHERE 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 le SELECT .