Mysql
 sql >> Database >  >> RDS >> Mysql

MySql:imposta una variabile con una lista

Le variabili in MySQL richiedono un singolo valore semplice, generalmente una stringa, un numero o un valore booleano. Quello che potresti fare, in questo caso, è indirizzare i tuoi ID vendite tramite GROUP_CONCAT() , che restituirà un elenco separato da virgole di tutti gli ID vendite (con alcune limitazioni:potrebbe essere necessario modificare alcune impostazioni di configurazione se si dispone di molti ID vendite e non è possibile filtrarli affatto), quindi eseguire un FIND_IN_SET() , che verifica la presenza di un valore in un elenco separato da virgole. Qualcosa del genere funzionerebbe per piccoli 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;

Potresti anche ignorare completamente la creazione della variabile tramite un join, che sarebbe più veloce e aggirerebbe il limite di lunghezza su 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;