sql >> Database >  >> RDS >> Mysql

Definieer een variabele binnen select en gebruik deze binnen dezelfde select

MySQL documentatie is hier heel duidelijk over:

Als algemene regel moet u nooit een waarde aan een gebruikersvariabele toewijzen en de waarde in dezelfde instructie lezen. U krijgt misschien de resultaten die u verwacht, maar dit is niet gegarandeerd. De volgorde van evaluatie voor expressies met gebruikersvariabelen is niet gedefinieerd en kan veranderen op basis van de elementen in een bepaalde instructie; bovendien is het niet gegarandeerd dat deze volgorde hetzelfde is tussen releases van de MySQL Server. In SELECT @a, @a:[email protected] +1, ..., je zou denken dat MySQL eerst @a zal evalueren en dan een tweede opdracht zal doen. Het wijzigen van de instructie (bijvoorbeeld door een clausule GROUP BY, HAVING of ORDER BY toe te voegen) kan ertoe leiden dat MySQL een uitvoeringsplan selecteert met een andere evaluatievolgorde.

Je kunt doen wat je wilt met een subquery:

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


  1. Ongeordende resultaten in SQL

  2. geen sqljdbc_auth in java.library.path

  3. DBCC CLONEDATABASE en Query Store gebruiken voor testen

  4. Is de OraOLEDB-provider in .NET onbetrouwbaar op CLOB-velden?