Myslím, že chcete korelovaný poddotaz:
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
);
Změnil jsem/opravil jsem spoustu dalších věcí:
- Aliasy tabulek usnadňují psaní a čtení dotazu.
- Zpětná zatržítka znesnadňují psaní a čtení dotazu.
- Podmínky pouze u aktualizované tabulky by měly být ve vnějším
WHERE
, nikoli vnitřníWHERE
. - Nastavení proměnných v
EXISTS
poddotaz prostě nedává smysl.EXISTS
testuje, zda řádky existovat. Logicky by se mohl spustit bez vyhodnoceníSELECT
.