Zmienne w MySQL wymagają pojedynczej, prostej wartości, zazwyczaj ciągu, liczby lub wartości logicznej. W tym przypadku możesz przekierować swoje identyfikatory sprzedaży przez GROUP_CONCAT()
, który zwróci rozdzieloną przecinkami listę wszystkich identyfikatorów sprzedaży (z pewnymi ograniczeniami — może być konieczne dostosowanie niektórych ustawień konfiguracji, jeśli masz dużo identyfikatorów sprzedaży i nie możesz ich w ogóle filtrować), a następnie wykonaj FIND_IN_SET()
, który sprawdza wartość na liście rozdzielanej przecinkami. Coś takiego działałoby w przypadku małych zestawów:
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;
Można również całkowicie pominąć tworzenie zmiennej poprzez łączenie, co byłoby szybsze i obejdzie ograniczenie długości w 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;