Heim >Datenbank >MySQL-Tutorial >Warum führt die Verwendung von Variablen in einer einzelnen SQL-SELECT-Anweisung häufig zu unerwarteten Ergebnissen?

Warum führt die Verwendung von Variablen in einer einzelnen SQL-SELECT-Anweisung häufig zu unerwarteten Ergebnissen?

DDD
DDDOriginal
2024-12-20 22:29:13307Durchsuche

Why Does Using Variables in a Single SQL SELECT Statement Often Return Unexpected Results?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn