Myślę, że potrzebujesz skorelowanego podzapytania:
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
);
Zmieniłem/naprawiłem kilka innych rzeczy:
- Aliasy tabel ułatwiają pisanie i czytanie zapytań.
- Wsteczne znaki utrudniają pisanie i odczytywanie zapytania.
- Warunki tylko dla aktualizowanej tabeli powinny znajdować się w zewnętrznym
WHERE
, a nie wewnętrzneWHERE
. - Ustawianie zmiennych w
EXISTS
podzapytanie po prostu nie ma sensu.EXISTS
sprawdza, czy wiersze istnieć. Logicznie, może działać bez ocenySELECT
.