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;