Saya pikir Anda menginginkan subkueri yang berkorelasi:
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
);
Saya mengubah/memperbaiki banyak hal lain:
- Alias tabel membuat kueri lebih mudah ditulis dan dibaca.
- Backtick membuat kueri lebih sulit untuk ditulis dan dibaca.
- Kondisi hanya pada tabel yang diperbarui harus di luar
WHERE
, bukan bagian dalamWHERE
. - Menyetel variabel dalam
EXISTS
subquery tidak masuk akal.EXISTS
menguji apakah baris ada. Logikanya, itu bisa dijalankan tanpa pernah mengevaluasiSELECT
.