Heim > Datenbank > MySQL-Tutorial > Wie kann ich eine Variable in einer SQL-SELECT-Anweisung sicher definieren und verwenden?

Wie kann ich eine Variable in einer SQL-SELECT-Anweisung sicher definieren und verwenden?

Patricia Arquette
Freigeben: 2024-12-02 03:56:12
Original
320 Leute haben es durchsucht

How Can I Safely Define and Use a Variable Within a SQL SELECT Statement?

Definieren und Verwenden einer Variablen innerhalb einer Select-Anweisung

In SQL wird im Allgemeinen nicht empfohlen, einer Benutzervariablen einen Wert zuzuweisen und Verwenden Sie es innerhalb derselben Select-Anweisung. In der MySQL-Dokumentation wird ausdrücklich darauf hingewiesen, dass die Auswertungsreihenfolge für solche Ausdrücke undefiniert ist und je nach Anweisungselementen und Serverversionen variieren kann.

Um diesen Punkt zu veranschaulichen, betrachten Sie die folgende Abfrage:

SELECT 
    @z:=SUM(item),
    2*@z
FROM
    TableA;
Nach dem Login kopieren

In dieser Abfrage würden Sie erwarten, dass die zweite Spalte den Wert von @z multipliziert mit zwei zurückgibt. MySQL gibt jedoch möglicherweise NULL zurück, da die Auswertungsreihenfolge nicht garantiert ist. Dieses Verhalten unterscheidet sich von der Verwendung einer gespeicherten Prozedur anstelle einer Benutzervariablen, wie unten gezeigt:

SELECT 
    @z:=someProcedure(item),
    2*@z
FROM
    TableA;
Nach dem Login kopieren

In diesem Fall werden die erwarteten Ergebnisse erzielt, da der Aufruf der gespeicherten Prozedur vor der Variablenzuweisung ausgewertet wird.

Um dieses Problem zu beheben und eine Variable innerhalb einer SELECT-Anweisung zu definieren, können Sie eine Unterabfrage verwenden:

select @z, @z*2
from (SELECT @z:=sum(item)
      FROM TableA
     ) t;
Nach dem Login kopieren

Dieser Ansatz stellt sicher, dass die Variablenzuweisung erfolgt, bevor sie verwendet wird die äußere Abfrage.

Das obige ist der detaillierte Inhalt vonWie kann ich eine Variable in einer SQL-SELECT-Anweisung sicher definieren und verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage