Mysql 使用存储过程作为子查询

Mysql 使用存储过程作为子查询,mysql,stored-procedures,Mysql,Stored Procedures,我在MySQL中创建了一个存储过程,如下所示 CREATE DEFINER=`root`@`localhost` PROCEDURE `my_proc`(IN var1 VARCHAR(25)) BEGIN select (sum(er)*9)/(out/3) as era from table1 where id = var1 group by id; END 我想从另一个表中获取此信息。我想这样做(伪代码) 基本上,我让存储过程计算一些信息,并将其作为列返回到该查询中 存储过程是正确的解决

我在MySQL中创建了一个存储过程,如下所示

CREATE DEFINER=`root`@`localhost` PROCEDURE `my_proc`(IN var1 VARCHAR(25))
BEGIN
select (sum(er)*9)/(out/3) as era from table1 where id = var1 group by id;
END
我想从另一个表中获取此信息。我想这样做(伪代码)

基本上,我让存储过程计算一些信息,并将其作为列返回到该查询中

存储过程是正确的解决方案吗


**注意:在伪查询中,表名应该与存储过程中的表名相同

您可以定义存储函数而不是存储过程

CREATE DEFINER=`root`@`localhost` FUNCTION `my_func`(IN var1 VARCHAR(25))
  RETURNS NUMERIC(9,2)
BEGIN
  RETURN (SELECT (SUM(er)*9)/(out/3) AS era FROM table1 WHERE id = var1);
END
然后,您可以像调用函数一样简单地调用它:

SELECT id, column1, column2, my_func(table1.id) AS era FROM table1
必须保证存储的函数返回单个标量才能在选择列表中使用

因为这是多余的,所以我把这群人都撤走了

上面的例子有点可疑,因为没有理由调用这样的函数来计算单行的和。但我想你脑子里有更复杂的想法

SELECT id, column1, column2, my_func(table1.id) AS era FROM table1