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

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

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

Запрос:

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)));  
-1
bilal shakir 17 Апр 2019 в 13:42

2 ответа

Лучший ответ

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

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
0
Aakash Martand 17 Апр 2019 в 11:00

Это всего лишь предложение для кода (ответ на конкретный вопрос уже есть в комментарии к вопросу 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  
1
scaisEdge 17 Апр 2019 в 11:08