Penso che tu voglia una sottoquery correlata:
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
);
Ho cambiato/riparato un sacco di altre cose:
- Gli alias di tabella semplificano la scrittura e la lettura della query.
- I backtick rendono la query più difficile da scrivere e leggere.
- Le condizioni solo sulla tabella in fase di aggiornamento dovrebbero trovarsi nel
WHERE
esterno , non ilWHERE
interno . - Impostazione di variabili in un
EXISTS
subquery semplicemente non ha senso.EXISTS
verifica se righe esistere. Logicamente, potrebbe essere eseguito senza mai valutare ilSELECT
.