Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySql:defina uma variável com uma lista


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;