Ich habe eine gespeicherte Prozedur wie folgt aus:Wie einige Spalten einer gespeicherten Prozedur in Mysql wählen
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
Eigentlich ich es als eine Ansicht verwenden wollte, aber ich habe Variablen, weil ich sie und sie ordnen wollte ließ mich es nicht in einer Ansicht verwenden.
habe ich versucht, die Abfrage unten, aber es ist nicht korrekt:
select * from (Call `RankAll`())
So wie kann ich mehrere Spalten aus ihr wählen?
Ich denke, Sie müssen die gespeicherte Prozedur speichern ihre Ergebnisse in einer temporären Tabelle speichern. Dann können Sie aus dieser Tabelle auswählen. Siehe http://stackoverflow.com/questions/2466713/use-result-set-of-mysql-stored-procedure-in-otherother-stored- procedure für ein ähnliches Problem. – Barmar
Es ist nicht möglich, die Ergebnismenge (n) zu verwenden, die von einer Prozedur in einer anderen SQL-Anweisung zurückgegeben werden. Die Prozedur kann nicht als Zeilenquelle für eine Abfrage referenziert werden. Wenn Sie SQL Server verwenden, können Sie eine Tabellenwertfunktion schreiben. Am nächsten kommt man in MySQL, wenn die Prozedur eine temporäre Tabelle auffüllt und dann in einer separaten Abfrage auf die temporäre Tabelle verweist. Mit dem hier gezeigten Beispiel könnte die Abfrage in der Prozedur aus der Prozedur herausgenommen und als Inline-Ansichtsdefinition verwendet werden. (Ersetzen Sie 'Call RankAll' durch die Abfrage. Und weisen Sie natürlich einen Tabellenalias zu.) – spencer7593