Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySql :définir une variable avec une liste

Les variables dans MySQL nécessitent une seule valeur simple, généralement une chaîne, un nombre ou un booléen. Ce que vous pouvez faire, dans ce cas, est d'acheminer vos identifiants de vente via GROUP_CONCAT() , qui renverra une liste séparée par des virgules de tous les ID de vente (avec certaines limitations - vous devrez peut-être ajuster certains paramètres de configuration si vous avez beaucoup d'ID de vente et que vous ne pouvez pas les filtrer du tout), puis faites un FIND_IN_SET() , qui recherche une valeur dans une liste séparée par des virgules. Quelque chose comme ça fonctionnerait pour de petits ensembles :

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;

Vous pouvez également contourner entièrement la création de la variable via une jointure, ce qui serait plus rapide et contournerait la limitation de longueur sur 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;