Heim >Datenbank >MySQL-Tutorial >Warum führt die Verwendung von Variablen in einer einzelnen SQL-SELECT-Anweisung häufig zu unerwarteten Ergebnissen?
Variablen innerhalb einer SELECT-Anweisung deklarieren und verwenden
In SQL kann das Zuweisen eines Werts zu einer Variablen und das Abrufen dieses Werts innerhalb derselben Abfrage möglich sein herausfordernd sein. Betrachten Sie das folgende Beispiel:
SELECT @z:=SUM(item), 2*@z FROM TableA;
Diese Abfrage versucht, die Summe der Spalte „item“ zu berechnen und sie in einer Variablen mit dem Namen „@z“ zu speichern. Anschließend wird der Wert von „@z“ mit 2 multipliziert. Überraschenderweise gibt die zweite Spalte jedoch immer NULL zurück.
Dies liegt daran, dass in der MySQL-Dokumentation ausdrücklich angegeben ist, dass das Zuweisen eines Werts zu einer Benutzervariablen und das Lesen innerhalb der Auf dieselbe Aussage sollte man sich nicht verlassen. Die Auswertungsreihenfolge solcher Ausdrücke ist nicht definiert und kann sich in zukünftigen Versionen ändern.
Um dies weiter zu veranschaulichen, betrachten Sie die alternative Abfrage:
SELECT @z:=someProcedure(item), 2*@z FROM TableA;
In dieser Abfrage ist „@z“. über einen Prozeduraufruf einen Wert zugewiesen bekommen. In diesem Szenario funktioniert die Abfrage wie erwartet, da der Prozeduraufruf getrennt von der Variablenzuweisung ausgewertet wird.
Um die Einschränkung bei Benutzervariablen zu überwinden, können Sie eine Unterabfrage verwenden, um den Wert zuzuweisen und ihn innerhalb der Hauptabfrage abzurufen Abfrage:
select @z, @z*2 from (SELECT @z:=sum(item) FROM TableA ) t;
In dieser Unterabfrage wird der Wert von „@z“ mit SELECT zugewiesen. Die Hauptabfrage wählt dann „@z“ aus und führt die notwendigen Berechnungen durch.
Das obige ist der detaillierte Inhalt vonWarum führt die Verwendung von Variablen in einer einzelnen SQL-SELECT-Anweisung häufig zu unerwarteten Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!