Tôi nghĩ bạn muốn một truy vấn con tương quan:
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
);
Tôi đã thay đổi / sửa một số thứ khác:
- Bí danh của bảng giúp truy vấn dễ viết và dễ đọc hơn.
- Dấu gạch chéo khiến truy vấn khó viết và khó đọc hơn.
- Các điều kiện chỉ trên bảng đang được cập nhật phải nằm trong
WHERE
bên ngoài , không phảiWHERE
bên trong . - Đặt các biến trong
EXISTS
truy vấn con đơn giản là không có ý nghĩa.EXISTS
kiểm tra xem hàng hiện hữu. Về mặt logic, nó có thể thực thi mà không cần đánh giáSELECT
.