使用存储过程作为子查询

时间:2014-04-14 22:48:35

标签: 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

我有另一张表,我想从中获取此信息。我想做这样的事情(伪代码)

select id, column1, column2, (call my_proc(table1.id)) as era from table1

Basiclly我正在使用我的存储过程计算一些信息并将其作为列返回到该查询中。

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

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

1 个答案:

答案 0 :(得分:2)

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

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

必须保证存储的函数返回单个标量,以便在选择列表中使用。

我删除了GROUP BY,因为它是多余的。

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