Variáveis no MySQL requerem um valor único e simples, geralmente uma string, número ou booleano. O que você pode fazer, neste caso, é encaminhar seus IDs de vendas por meio de
GROUP_CONCAT()
, que retornará uma lista separada por vírgulas de todos os IDs de vendas (com algumas limitações - talvez seja necessário ajustar algumas configurações se você tiver muitos IDs de vendas e não puder filtrá-los) e, em seguida, faça um FIND_IN_SET()
, que verifica um valor em uma lista separada por vírgulas. Algo assim funcionaria para pequenos conjuntos: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;
Você também pode ignorar a criação da variável inteiramente por meio de uma junção, o que seria mais rápido e contornaria a limitação de comprimento em
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;