Мисля, че искате корелирана подзаявка:
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
);
Промених/поправих куп други неща:
- Псевдонимите на таблици правят заявката по-лесна за писане и четене.
- Отметките правят заявката по-трудна за писане и четене.
- Само условията в таблицата, която се актуализира, трябва да са във външния
WHERE
, а не вътрешниятWHERE
. - Задаване на променливи в
EXISTS
подзаявката просто няма смисъл.EXISTS
тества дали редове съществуват. Логично може да се изпълни, без изобщо да се оценяваSELECT
.