2017-08-08 14 views
0

verwenden Ich habe eine Frage im Zusammenhang mit der gespeicherten Prozedur. Ich habe eine Tabelle namens account mit einem Feld namens agent. Ich habe eine einfache SQL wie folgt aus:MySQL: Gespeicherte Prozedur in SELECT und FROM

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

Wenn ich diese über SQL auf eine Tabelle als agent_structure genannt einfügen, kann ich einfach JOIN diese Tabelle mit einer anderen Tabelle (zB Kunde) von SQL wie folgt aus:

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

Das Problem ist, ich möchte nicht eine andere Tabelle nur zum Speichern eines Feldes hinzufügen. Also versuche ich gespeicherte Prozedur zu verwenden. Also habe ich die erste SQL-Prozedur wie folgt aus:

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

Das sieht sehr gut, da, wenn ich schreibe ‚CALL agent_structure();‘, die SQL-Ausgang die einzige Feld, das ich will. Ich weiß jedoch nicht, wie ich dieses Ergebnis wie in der zweiten SQL verwenden soll. Ich versuche, dieser Attrappe Weg nach Parametern an die Prozedur geben, aber es funktioniert nicht:

-- 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 

Das Ziel ist wie ein Skript zu einem anderen Skript. Ich möchte das erste Skript nicht direkt in das zweite Skript einfügen, da mein aktuelles Skript größer ist und mehrere Ebenen hat. Kann mir jemand helfen, die Lösung dafür zu finden?

Antwort

1

Wie ich sehen kann, können Sie Stored Procedure nicht in SELECT einschließen. In diesem Fall müssen Sie View stattdessen Stored Procedure verwenden.

 

    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

Es ist falsch. # 1064 - Sie haben einen Fehler in Ihrer SQL-Syntax; Fehler Start in 'FROM @a ...' – Tan

+0

@Tan - Verwenden Sie stattdessen Ansicht gespeicherte Prozedur. [Hier] (https://dev.mysql.com/doc/refman/5.7/de/create-view.html) finden Sie weitere Informationen, wie man Views verwendet – kastriotcunaku

+0

Das funktioniert, vielen Dank. Ich habe zwei Fragen: 1) ist es möglich, eine Ansicht zu erstellen, die eine Ansicht innerhalb des Skripts haben? 2) Was sind die Unterschiede bei der Verwendung von Verfahren und Ansicht? – Tan

Verwandte Themen