Các biến trong MySQL yêu cầu một giá trị đơn giản, thường là một chuỗi, số hoặc boolean. Những gì bạn có thể làm, trong trường hợp này, là định tuyến các ID bán hàng của mình thông qua GROUP_CONCAT()
, sẽ trả về danh sách được phân tách bằng dấu phẩy gồm tất cả các ID bán hàng (với một số hạn chế - bạn có thể cần điều chỉnh một số cài đặt cấu hình nếu bạn có nhiều ID bán hàng và không thể lọc chúng), sau đó thực hiện FIND_IN_SET()
, kiểm tra một giá trị trong danh sách được phân tách bằng dấu phẩy. Một cái gì đó như thế này sẽ hoạt động cho các bộ nhỏ:
SET @list = (SELECT GROUP_CONCAT(ID) FROM Sales);
UPDATE items SET aValue = X WHERE FIND_IN_SET(salesID, @list) > 0;
DELETE FROM SalesMessages WHERE FIND_IN_SET(salesId, @list) > 0;
Bạn cũng có thể bỏ qua hoàn toàn việc tạo biến thông qua một phép nối, điều này sẽ nhanh hơn và sẽ vượt qua giới hạn độ dài trên GROUP_CONCAT()
:
UPDATE items as i INNER JOIN Sales as s ON s.ID = i.salesID SET i.aValue = X;
DELETE sm FROM SalesMessages as sm INNER JOIN Sales as s ON s.ID = sm.salesID;