Mysql
 sql >> Database >  >> RDS >> Mysql

Tabella specificata due volte in Procedura, come risolvere?

Penso che tu voglia una sottoquery correlata:

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 
             );

Ho cambiato/riparato un sacco di altre cose:

  • Gli alias di tabella semplificano la scrittura e la lettura della query.
  • I backtick rendono la query più difficile da scrivere e leggere.
  • Le condizioni solo sulla tabella in fase di aggiornamento dovrebbero trovarsi nel WHERE esterno , non il WHERE interno .
  • Impostazione di variabili in un EXISTS subquery semplicemente non ha senso. EXISTS verifica se righe esistere. Logicamente, potrebbe essere eseguito senza mai valutare il SELECT .