Променливите в MySQL изискват една проста стойност, обикновено низ, число или булева стойност. Това, което бихте могли да направите в този случай, е да насочите идентификаторите си за продажби през GROUP_CONCAT()
, който ще върне разделен със запетая списък с всички идентификатори на продажби (с някои ограничения - може да се наложи да коригирате някои конфигурационни настройки, ако имате много идентификатори на продажби и изобщо не можете да ги филтрирате), и след това направете FIND_IN_SET()
, който проверява за стойност в разделен със запетая списък. Нещо подобно ще работи за малки набори:
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;
Можете също така да заобиколите създаването на променлива изцяло чрез присъединяване, което би било по-бързо и би заобиколило ограничението за дължина на 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;