我有一个与存储过程有关的问题。我有一个名为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
目标就像将脚本用于另一个脚本。我不想将第一个脚本直接放到第二个脚本,因为我的实际脚本更大并且有多个层。有人可以帮我解决这个问题吗?
答案 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