Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Definieren Sie eine Variable innerhalb von select und verwenden Sie sie innerhalb derselben Auswahl

MySQL Dokumentation ist hier ganz klar:

Als allgemeine Regel sollten Sie einer Benutzervariablen niemals einen Wert zuweisen und den Wert innerhalb derselben Anweisung lesen. Sie erhalten möglicherweise die erwarteten Ergebnisse, dies kann jedoch nicht garantiert werden. Die Auswertungsreihenfolge für Ausdrücke mit Benutzervariablen ist undefiniert und kann sich basierend auf den in einer bestimmten Anweisung enthaltenen Elementen ändern; außerdem kann nicht garantiert werden, dass diese Reihenfolge zwischen den Versionen des MySQL-Servers gleich ist. In SELECT @a, @a:[email protected] +1, ..., Sie könnten denken, dass MySQL zuerst @a auswertet und dann als zweites eine Zuweisung vornimmt. Das Ändern der Anweisung (z. B. durch Hinzufügen einer GROUP BY-, HAVING- oder ORDER BY-Klausel) kann jedoch dazu führen, dass MySQL einen Ausführungsplan mit einer anderen Auswertungsreihenfolge auswählt.

Mit einer Unterabfrage können Sie tun, was Sie wollen:

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