2009-09-02 10 views
8

Esiste una soluzione alternativa in modo che io possa effettivamente fare qualcosa di simile senza dover ripetere l'intera espressione o forzare un UNION o un tavolo temporaneo?Posso riutilizzare un'espressione in una query MySQL come variabile per un altro campo?

SELECT (complex expression) AS variable1, 
     (complex expression based on variable1) AS variable2 

Dal variabile1 non è definito ed è disponibile per il 2 ° punto a causa di come funziona mysql, il concetto di cui sopra non potrà mai funzionare.

Devo ripetere l'espressione per variabile2 oppure utilizzare UNION o una tabella temporanea e utilizzare due passaggi.

C'è qualche trucco di cui non sono a conoscenza per eseguire questo in modo più efficiente?

(notare che ho bisogno di conoscere la risposta sia per variabile1 e variabile2 come essi vengono poi utilizzati per un inserto)

Grazie per tutte le idee!

+1

possibile duplicato del [Posso resuse un campo calcolato in una query SELECT?] (http://stackoverflow.com/questions/6085443/can-i-resuse-a-calculated-field-in-a-select-query) –

risposta

6

spingere il primo calcolo a una tabella derivata:

select variable1 
    , complex_function(variable1, other_column) as variable2 
    , yet_another column 
    from (select complex_operation as variable1 
      , other_column 
      , yet_another_column 
      from whatever) dt 
+0

È peggio di quanto volessi, ma ti darò la migliore risposta per tutti i tuoi sforzi, grazie. –

4
SELECT @v1:=(complex expression) AS variable1, 
     (complex expression * @v1) AS variable2 
+0

Ho intenzione di essere inorridito se è semplicemente così facile e onestamente non potrei lo capisco, ma grazie! –

+4

Ah, sai cosa? La pagina di manuale sopra elencata da knittl ha ripetuto gli avvertimenti di non utilizzare o fare affidamento sulle variabili impostate nella stessa istruzione SELECT in quanto i campi possono essere eseguiti fuori ordine in base al WHERE, ecc. E la variabile viene trattenuta dall'esecuzione precedente. Quindi riutilizzare le variabili all'interno della stessa SELECT è probabilmente una cattiva idea, è pensata per query sequenziali. –

+0

personalmente non ho mai visto il comportamento avvertito nel manuale, anche dopo aver provato a farlo accadere. ma se il manuale mette in guardia contro di esso, allora non lo userei. * bleh * – longneck

0

Penso che l'unico modo sia quello di ripetere la tua prima espressione_ complessa nella seconda, anche se pensavo che mysql potesse gestire tali casi.

edit: una rapida ricerca alzato questo: http://dev.mysql.com/doc/refman/5.0/en/user-variables.html

+0

Grazie per il collegamento, in qualche modo ho completamente perso quella parte di MySQL! –

+0

Il tuo link al manuale è stato molto utile per capire perché la soluzione di longneck era difettosa, grazie ancora. –

Problemi correlati