Ik denk dat je een gecorreleerde subquery wilt:
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
);
Ik heb een heleboel andere dingen veranderd/gefixt:
- Tabelaliassen maken de query gemakkelijker te schrijven en te lezen.
- Backticks maken de query moeilijker om te schrijven en te lezen.
- Alleen voorwaarden voor de tabel die wordt bijgewerkt, moeten in de buitenste
WHERE
. staan , niet de innerlijkeWHERE
. - Variabelen instellen in een
EXISTS
subquery heeft gewoon geen zin.EXISTS
test of rijen bestaan. Logischerwijs zou het kunnen worden uitgevoerd zonder ooit deSELECT
. te evalueren .