Heim >Datenbank >MySQL-Tutorial >Wie kann ich Variablen in einer MySQL-SELECT-Anweisung korrekt verwenden?

Wie kann ich Variablen in einer MySQL-SELECT-Anweisung korrekt verwenden?

DDD
DDDOriginal
2024-12-16 14:13:09929Durchsuche

How Can I Correctly Use Variables Within a MySQL SELECT Statement?

Variablen in SELECT-Anweisungen verwenden

Bei der Arbeit mit MySQL kann es vorkommen, dass Sie Variablen innerhalb derselben SELECT-Anweisung definieren und verwenden möchten Stellungnahme. Es ist jedoch wichtig, sich der damit verbundenen Einschränkungen bewusst zu sein.

Variablenzuweisung und Lesbarkeit

Gemäß der MySQL-Dokumentation wird es im Allgemeinen nicht empfohlen, a einen Wert zuzuweisen Benutzervariable und lesen Sie sie innerhalb derselben Anweisung. Die Auswertungsreihenfolge für Ausdrücke mit Benutzervariablen ist nicht definiert und kann je nach Anweisungselementen variieren.

Dies bedeutet, dass sich die folgende Abfrage möglicherweise nicht wie erwartet verhält:

SELECT
    @z:=SUM(item),
    2*@z
FROM
    TableA;

In diesem Fall , erhalten Sie wahrscheinlich NULL für die zweite Spalte.

Warum der Unterschied mit Prozeduren?

Sie fragen sich vielleicht, warum die folgende Abfrage, die eine gespeicherte Prozedur anstelle einer Benutzervariablen verwendet, wie erwartet funktioniert:

SELECT
    @z:=someProcedure(item),
    2*@z
FROM
    TableA;

Der Grund dafür ist, dass sie gespeichert ist Prozeduren werden anders ausgewertet als Benutzervariablen. Die Auswertungsreihenfolge für gespeicherte Prozeduren ist definiert und konsistent.

Verwenden einer Unterabfrage

Um die gewünschte Funktionalität zu erreichen, können Sie eine Unterabfrage verwenden:

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

Dieser Ansatz verwendet eine Unterabfrage, um die Benutzervariable (@z) zu initialisieren und dann in der Hauptabfrage darauf zu verweisen.

Das obige ist der detaillierte Inhalt vonWie kann ich Variablen in einer MySQL-SELECT-Anweisung korrekt verwenden?. 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