MySQL:在SELECT和FROM中使用存储过程

时间:2017-08-08 09:16:57

标签: mysql database variables select stored-procedures

我有一个与存储过程有关的问题。我有一个名为account的表,名为agent的字段。我有一个像这样的简单SQL:

-- First SQL --
SELECT      account.agent
FROM        account
GROUP BY    account.agent
HAVING      account.agent > 0

如果我将上面的SQL插入到一个名为agent_structure的表中,我可以使用这样的SQL将该表与另一个表(例如客户)联系起来:

-- Second SQL --
SELECT      agent_structure.agent,
            customer.name, 
            customer.age, 
            customer.country
FROM        agent_structure
INNER JOIN  customer ON agent_structure.agent = customer.id

问题是,我不想仅为了保存一个字段而添加另一个表。所以,我尝试使用存储过程。所以,我把第一个SQL放到这样的程序中:

-- FIRST SQL put into Procedure --
CREATE PROCEDURE agent_structure() 
SELECT      account.agent
FROM        account
GROUP BY    account.agent
HAVING      account.agent > 0

这看起来非常好,因为当我编写CALL agent_structure();'时,SQL会输出我想要的单个字段。但是,我不知道如何在第二个SQL中使用此结果。在给出程序参数后我尝试这种虚拟方式,但它不起作用:

-- Second SQL but use stored procedure --
CALL agent_structure(@a);
SELECT      @a,
            customer.name, 
            customer.age, 
            customer.country
FROM        @a
INNER JOIN  customer ON @a.agent = customer.id

目标就像将脚本用于另一个脚本。我不想将第一个脚本直接放到第二个脚本,因为我的实际脚本更大并且有多个层。有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

我可以看到你不能在SELECT中包含存储过程。在这种情况下,您需要使用View而不是Stored Procedure。


    CREATE VIEW agent_structure AS
    SELECT      account.agent
    FROM        account
    GROUP BY    account.agent
    HAVING      account.agent > 0


    SELECT      customer.name, 
                customer.age, 
                customer.country
    FROM        agent_structure AS a
    INNER JOIN  customer AS c ON a.agent = c.id