sql >> Databasteknik >  >> RDS >> Mysql

Tabell specificerad två gånger i Procedur, hur fixar jag?

Jag tror att du vill ha en korrelerad underfråga:

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

Jag ändrade/fixade en massa andra saker:

  • Tabellalias gör frågan lättare att skriva och läsa.
  • Backstick gör frågan svårare att skriva och läsa.
  • Villkor endast i tabellen som uppdateras ska finnas i den yttre WHERE , inte den inre WHERE .
  • Ställa in variabler i en EXISTS subquery är helt enkelt inte vettigt. EXISTS testar om rader existera. Logiskt sett kunde den köras utan att någonsin utvärdera SELECT .



  1. MySQL oregelbundna frågetider

  2. MySQL-uppdateringstabell baserat på ett annat tabellvärde

  3. mysql-tabellstruktur med flera variabler

  4. Java körs av MySQL trigger