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

MySql:sæt en variabel med en liste

Variabler i MySQL kræver en enkelt, simpel værdi, generelt en streng, tal eller boolean. Hvad du kan gøre i dette tilfælde er at rute dine salgs-id'er gennem GROUP_CONCAT() , som returnerer en kommasepareret liste over alle salgs-id'er (med nogle begrænsninger - du skal muligvis justere nogle konfigurationsindstillinger, hvis du har mange salgs-id'er og slet ikke kan filtrere dem), og lav derefter en FIND_IN_SET() , som kontrollerer for en værdi i en kommasepareret liste. Noget som dette ville fungere for små sæt:

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;

Du kan også omgå variabeloprettelsen helt gennem en joinforbindelse, hvilket ville være hurtigere, og ville komme uden om længdebegrænsningen på 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;



  1. Kan jeg starte en trigger på select statement i mysql?

  2. SQL DROP TABLE Syntaks – Listet efter DBMS

  3. SQLite JSON_OBJECT()

  4. ExecuteScalar vs ExecuteNonQuery ved returnering af en identitetsværdi