Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Tabelle zweimal im Verfahren angegeben, wie beheben?

Ich denke, Sie wollen eine korrelierte Unterabfrage:

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

Ich habe ein paar andere Dinge geändert/behoben:

  • Tabellenaliase erleichtern das Schreiben und Lesen der Abfrage.
  • Backticks erschweren das Schreiben und Lesen der Abfrage.
  • Bedingungen nur für die zu aktualisierende Tabelle sollten im äußeren WHERE stehen , nicht das innere WHERE .
  • Variablen in einem EXISTS setzen Unterabfrage macht einfach keinen Sinn. EXISTS testet, ob Zeilen existieren. Logischerweise könnte es ausgeführt werden, ohne jemals SELECT auszuwerten .