选择存储过程的一些列我有一个存储过程是这样的:如何在MySQL
CREATE PROCEDURE `RankAll`()
LANGUAGE SQL
NOT DETERMINISTIC
READS SQL DATA
SQL SECURITY INVOKER
COMMENT ''
BEGIN
select userID,sum(score) as score,@rank := @rank + 1 AS rank from
(
select userID,score from ScoreMessages
union all
select userID,score from ScoreExams
) as scores
JOIN (SELECT @rank := 0) rank
group by userID
order by score desc;
END
其实我想用它作为一个看法,但我有变数,因为我想对他们进行排名,并没有让我在视图中使用它。
我想下面的查询,但它是不正确的:
select * from (Call `RankAll`())
所以,我怎么能选择多列出来的吗?
我想你必须让存储过程将其结果保存在临时表中。然后您可以从该表中选择。有关类似问题,请参阅http://stackoverflow.com/questions/2466713/use-result-set-of-mysql-stored-procedure-in-another-stored-procedure。 – Barmar
无法使用从另一个SQL语句中的过程返回的结果集。该过程不能作为查询的行来源引用。如果您使用SQL Server,则可以编写一个表值函数。在MySQL中最接近的是让程序填充临时表,然后在单独的查询中引用临时表。通过此处显示的示例,过程中的查询可以从过程中取出,并用作内联视图定义。 (用查询代替'调用RankAll',然后分配一个表别名。) – spencer7593