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 inreWHERE
. - 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ärderaSELECT
.