Mysql добавить значение переменной в результирующий набор внутри хранимой процедуры вместо подзапроса - PullRequest
0 голосов
/ 17 апреля 2019

Этот подзапрос работает нормально с требуемым результатом, теперь я пишу хранимую процедуру для тех же результатов.

Я хочу использовать в логике хранимой процедуры как

  • Объявление переменных
  • Установить их
  • использовать в запросах

Запрос:

SELECT payloadstr,
       starttime
FROM   pa
WHERE  conid IN (SELECT conid
                 FROM   con
                 WHERE  lognid IN (SELECT id
                                   FROM   log
                                   WHERE  phyid IN (SELECT id
                                                    FROM   phyid
                                                    WHERE  mac = 9729)));  

Ответы [ 2 ]

1 голос
/ 17 апреля 2019

Это просто предложение для кода (ответ на конкретный вопрос уже есть в комментарии к вопросу P.Salmon)

Вместо набора вложенных IN (подвыбор) вы можете использовать некоторое внутреннее объединение

select pa.str, pa.time 
from pa 
INNER JOIN con ON con.lognid = pa.conid 
INNER JOIN log ON con.lognid = log.id 
INNER JOIN phyid ON log.phyid = phyid.id AND  mac =9729  
0 голосов
/ 17 апреля 2019

Попробуйте это:

BEGIN
    SET @macid = 9729; -- Take input from stored procedure

    SET @phyid_id = (SELECT GROUP_CONCAT(`id`) FROM `phyid` WHERE `mac` = @macid);
    SET @log_id = (SELECT GROUP_CONCAT(`id`) FROM `log` WHERE `phyid` IN(@phyid_id));
    SET @con_conid = (SELECT `conid` FROM `con` WHERE `lognid` IN(@log_id));

    SELECT `str`, `time` FROM `pa` WHERE `conid` IN(@con_conid);
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...