Eu acho que você quer uma subconsulta correlacionada:
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
);
Eu mudei/consertei um monte de outras coisas:
- Os aliases de tabela facilitam a escrita e a leitura da consulta.
- Os acentos graves tornam a consulta mais difícil de escrever e ler.
- As condições apenas na tabela que está sendo atualizada devem estar na parte externa
WHERE
, não oWHERE
interno . - Definindo variáveis em um
EXISTS
subconsulta simplesmente não faz sentido.EXISTS
testa se linhas existir. Logicamente, ele poderia ser executado sem nunca avaliar oSELECT
.