sql >> Databasteknik >  >> RDS >> Mysql

MySql:ställ in en variabel med en lista

Variabler i MySQL kräver ett enkelt, enkelt värde, vanligtvis en sträng, ett tal eller ett booleskt värde. Vad du kan göra i det här fallet är att dirigera dina försäljnings-ID:n genom GROUP_CONCAT() , som returnerar en kommaseparerad lista över alla försäljnings-ID:n (med vissa begränsningar - du kan behöva justera vissa konfigurationsinställningar om du har många försäljnings-ID:n och inte kan filtrera dem alls), och gör sedan en FIND_IN_SET() , som söker efter ett värde i en kommaseparerad lista. Något sådant här skulle fungera för små uppsättningar:

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 också kringgå variabelskapandet helt och hållet genom en join, vilket skulle vara snabbare, och skulle komma runt längdbegrä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. Inga operationer tillåtna efter att uttalandet stängts

  2. Så här konfigurerar du kluster-till-klusterreplikering för PostgreSQL

  3. Hur vet man vilken partition som kommer att användas i Postgres hashpartitionering?

  4. Hur man skapar en sammansatt primär nyckel i SQL Server (T-SQL-exempel)