相関サブクエリが必要だと思います:
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を評価しなくても実行できます。 。