Jeg tror, du vil have en korreleret underforespørgsel:
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
);
Jeg ændrede/rettede en masse andre ting:
- Tabelaliasser gør forespørgslen nemmere at skrive og læse.
- Backticks gør forespørgslen sværere at skrive og læse.
- Betingelser kun på den tabel, der opdateres, skal være i den ydre
WHERE
, ikke den indreWHERE
. - Indstilling af variabler i en
EXISTS
underforespørgsel giver simpelthen ikke mening.EXISTS
tester om rækker eksisterer. Logisk set kunne den køre uden nogensinde at evaluereSELECT
.