2017-08-08 9 views
0

ストアドプロシージャに関連する質問があります。私はエージェントという名前のフィールドを持つアカウントと呼ばれるテーブルを持っています。私はagent_structureと呼ばれるテーブルには、この上のSQLを挿入した場合MySQL:SELECTとFROMでストアドプロシージャを使用

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

が、私は単純に、このようにSQLを使用して別のテーブル(例えば顧客)と、このテーブルに参加できます:

私はこのような単純な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 

問題は、1つのフィールドを保存するためだけに別のテーブルを追加したくないということです。だから、私はストアドプロシージャを使用しようとします。だから、私はこのような手順に最初に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出力に私がしたい単一のフィールドを。しかし、私は2番目の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 

目的は別のスクリプトにスクリプトを使用するようなものです。私は実際のスクリプトがより大きく、複数のレイヤーを持っているので、最初のスクリプトを2番目のスクリプトに直接入れたくありません。誰でも私にこの解決策を教えてもらえますか?

答えて

1

私はSELECT内にストアドプロシージャを含めることはできません。この場合は、代わりにストアドプロシージャを使用する必要があります。

 

    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 

+0

それは間違っています。 #1064 - SQL構文に誤りがあります。 'FROM @a ...'でエラーが発生しました。 – Tan

+0

@Tan - ストアドプロシージャではなくビューを使用してみてください。 [Here](https://dev.mysql.com/doc/refman/5.7/en/create-view.html)より多くの情報をご覧いただけます。ビュー – kastriotcunaku

+0

これはうまくいきました。私は2つの質問があります: 1)スクリプト内でビューを持つビューを作成することは可能ですか? 2)プロシージャとビューの使用上の違いは何ですか? – Tan