sql >> Database teknologi >  >> RDS >> Mysql

Definer en variabel i select, og brug den inden for samme select

MySQL dokumentation er helt klar på dette:

Som en generel regel bør du aldrig tildele en værdi til en brugervariabel og læse værdien i den samme sætning. Du får muligvis de resultater, du forventer, men det er ikke garanteret. Evalueringsrækkefølgen for udtryk, der involverer brugervariabler, er udefineret og kan ændre sig baseret på elementerne indeholdt i en given sætning; derudover er denne rækkefølge ikke garanteret at være den samme mellem udgivelser af MySQL-serveren. I SELECT @a, @a:[email protected] +1, ..., du tror måske, at MySQL vil evaluere @a først og derefter udføre en opgavesekund. Ændring af sætningen (f.eks. ved at tilføje en GRUPPE BY, HAVING eller ORDER BY-klausul) kan dog få MySQL til at vælge en eksekveringsplan med en anden evalueringsrækkefølge.

Du kan gøre hvad du vil ved at bruge en underforespørgsel:

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


  1. Opstilling og identifikation af rækkemål i eksekveringsplaner

  2. Sådan kopieres data fra en tabel til en anden i SQL

  3. Forbindelsesproblemer med SQLAlchemy og flere processer

  4. Hvad er standardbegrænsningsnavnet i Oracle?