sql >> Databasteknik >  >> RDS >> Mysql

Definiera en variabel inom select och använd den inom samma select

MySQL dokumentation är ganska tydlig med detta:

Som en allmän regel bör du aldrig tilldela ett värde till en användarvariabel och läsa värdet i samma uttalande. Du kan få de resultat du förväntar dig, men detta är inte garanterat. Utvärderingsordningen för uttryck som involverar användarvariabler är odefinierad och kan ändras baserat på de element som finns i ett givet uttalande; dessutom garanteras inte denna ordning vara densamma mellan utgåvor av MySQL-servern. I SELECT @a, @a:[email protected] +1, ..., du kanske tror att MySQL kommer att utvärdera @a först och sedan göra en uppdragsekund. Ändring av satsen (till exempel genom att lägga till en GRUPPE BY-, HAVING- eller ORDER BY-sats) kan göra att MySQL väljer en exekveringsplan med en annan utvärderingsordning.

Du kan göra vad du vill med en underfråga:

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


  1. Transformational Stories på MariaDB OpenWorks Conference

  2. Hur ändrar jag en PostgreSQL-tabell och gör en kolumn unik?

  3. SQL Server - parametersniffning

  4. ISDATE() Exempel i SQL Server