Variablen in MySQL erfordern einen einzelnen, einfachen Wert, im Allgemeinen eine Zeichenfolge, eine Zahl oder einen booleschen Wert. In diesem Fall könnten Sie Ihre Vertriebs-IDs über GROUP_CONCAT()
leiten , die eine durch Kommas getrennte Liste aller Verkaufs-IDs zurückgibt (mit einigen Einschränkungen – Sie müssen möglicherweise einige Konfigurationseinstellungen anpassen, wenn Sie viele Verkaufs-IDs haben und diese überhaupt nicht filtern können), und führen Sie dann einen FIND_IN_SET()
, die nach einem Wert in einer durch Kommas getrennten Liste sucht. So etwas würde für kleine Sets funktionieren:
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;
Sie könnten die Variablenerstellung auch vollständig durch einen Join umgehen, was schneller wäre und die Längenbeschränkung von GROUP_CONCAT()
umgehen würde :
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;