sql >> Database >  >> RDS >> Mysql

MySql:stel een variabele in met een lijst

Variabelen in MySQL vereisen een enkele, eenvoudige waarde, meestal een tekenreeks, getal of boolean. Wat u in dit geval zou kunnen doen, is uw verkoop-ID's door GROUP_CONCAT() leiden. , die een door komma's gescheiden lijst van alle verkoop-ID's retourneert (met enkele beperkingen - u moet mogelijk enkele configuratie-instellingen aanpassen als u veel verkoop-ID's hebt en ze helemaal niet kunt filteren), en doe vervolgens een FIND_IN_SET() , die controleert op een waarde in een door komma's gescheiden lijst. Iets als dit zou werken voor kleine sets:

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;

U kunt het maken van variabelen ook volledig omzeilen via een join, wat sneller zou zijn en de lengtebeperking op GROUP_CONCAT() zou omzeilen. :

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;



  1. RAC installeren voor een database met gegevensbestanden

  2. Toon alleen uren in MYSQL DATEDIFF

  3. Hoe debuggen Lock wacht time-out overschreden op MySQL?

  4. COLLATIE 'utf8_general_ci' is niet geldig voor KARAKTERSET 'latin1'