Переменные в MySQL требуют одного простого значения, обычно это строка, число или логическое значение.В этом случае вы могли бы направить ваши идентификаторы продаж через GROUP_CONCAT()
, который вернет список всех идентификаторов продаж через запятую (с некоторыми ограничениями - вам может потребоваться настроить некоторые параметры конфигурации, если у вас многоИД продаж и не может их отфильтровать вообще), а затем выполните FIND_IN_SET()
, который проверяет значение в списке через запятую.Примерно так будет работать для небольших наборов:
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;
Вы также можете полностью обойти создание переменной через объединение, которое будет быстрее и обойдет ограничение длины на 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;