sql >> Database >  >> RDS >> Mysql

Tabel twee keer gespecificeerd in Procedure, hoe op te lossen?

Ik denk dat je een gecorreleerde subquery wilt:

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

Ik heb een heleboel andere dingen veranderd/gefixt:

  • Tabelaliassen maken de query gemakkelijker te schrijven en te lezen.
  • Backticks maken de query moeilijker om te schrijven en te lezen.
  • Alleen voorwaarden voor de tabel die wordt bijgewerkt, moeten in de buitenste WHERE . staan , niet de innerlijke WHERE .
  • Variabelen instellen in een EXISTS subquery heeft gewoon geen zin. EXISTS test of rijen bestaan. Logischerwijs zou het kunnen worden uitgevoerd zonder ooit de SELECT . te evalueren .



  1. paginering in lijstweergave

  2. Hoe om te gaan met nieuwe bestanden om te verwerken in cron job

  3. Een LINKER SEMI JOIN doen in SQL Server

  4. Hoe kan ik PDO gebruiken om een ​​resultatenarray in PHP op te halen?