【问题标题】:Mysql add variable value to result set inside stored procedure instead subqueryMysql将变量值添加到存储过程中的结果集中而不是子查询
【发布时间】:2019-04-17 10:42:56
【问题描述】:

这是子查询工作正常,需要的结果,现在我正在为相同的结果编写一个存储过程。

我想在存储过程逻辑中使用

  • 声明变量
  • 设置它们
  • 在查询中使用

查询:

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)));  

【问题讨论】:

  • 你的问题是什么?
  • 您不能从查询中调用存储过程,所以我看不到存储过程可以替换子查询 - 您应该稍微扩展您的问题。

标签: mysql sql stored-procedures


【解决方案1】:

这只是代码的建议(具体问题的答案已经在 P.Salmon 的问题评论中)

而不是嵌套的 IN (subselect) 集合 你可以使用一些内部连接

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  

【讨论】:

  • 是的,我使用内连接,只是为了理解我共享子查询的过程。
【解决方案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

【讨论】:

  • 谢谢,这给了我很大的支持来找到我的确切数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-29
  • 2020-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多