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