Ich denke, Sie wollen eine korrelierte Unterabfrage:
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
);
Ich habe ein paar andere Dinge geändert/behoben:
- Tabellenaliase erleichtern das Schreiben und Lesen der Abfrage.
- Backticks erschweren das Schreiben und Lesen der Abfrage.
- Bedingungen nur für die zu aktualisierende Tabelle sollten im äußeren
WHERE
stehen , nicht das innereWHERE
. - Variablen in einem
EXISTS
setzen Unterabfrage macht einfach keinen Sinn.EXISTS
testet, ob Zeilen existieren. Logischerweise könnte es ausgeführt werden, ohne jemalsSELECT
auszuwerten .