MySql: установить переменную со списком - PullRequest
0 голосов
/ 20 ноября 2018

Я изучал операторы MySQL и похожие проблемы для некоторых из них сейчас, и мне, кажется, не повезло.

Могу ли я создать переменную, которая будет хранить результат в 1 столбец дляиспользоваться в нескольких запросах?Будет ли это эффективным, или я не понимаю, чем БД отличается от PL?

Я думал что-то вроде следующего псевдокода

SET list = Select ID from Sales;
Update items set aValue = X where salesID in list
delete SalesMessages where salesId in list

У меня около 8Обновления, которые нужно выполнить в процедуре хранения. Я мог бы делать выборку для каждого случая вместо создания переменной, но я не чувствую себя лучшим подходом.Любая помощь?

1 Ответ

0 голосов
/ 20 ноября 2018

Переменные в 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...