Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySql:setze eine Variable mit einer Liste

Variablen in MySQL erfordern einen einzelnen, einfachen Wert, im Allgemeinen eine Zeichenfolge, eine Zahl oder einen booleschen Wert. In diesem Fall könnten Sie Ihre Vertriebs-IDs über GROUP_CONCAT() leiten , die eine durch Kommas getrennte Liste aller Verkaufs-IDs zurückgibt (mit einigen Einschränkungen – Sie müssen möglicherweise einige Konfigurationseinstellungen anpassen, wenn Sie viele Verkaufs-IDs haben und diese überhaupt nicht filtern können), und führen Sie dann einen FIND_IN_SET() , die nach einem Wert in einer durch Kommas getrennten Liste sucht. So etwas würde für kleine Sets funktionieren:

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;

Sie könnten die Variablenerstellung auch vollständig durch einen Join umgehen, was schneller wäre und die Längenbeschränkung von GROUP_CONCAT() umgehen würde :

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;