Domanda

problema

Sto usando il nome della colonna alternativo (alias) in una query, posso usare l'alias "data_name" come parte dell'ordine per ma non riesci a usarlo come parte della clausola WHERE.Il dove "Dato_name" viene trasmesso come il risultato di una richiesta dal mio controllo e non conosco il nome della colonna effettivo che dovrebbe essere utilizzato nella condizione in cui.

domanda
    .
  1. Ci è un modo / hack per utilizzare un alias colonna in una clausola dove?
  2. C'è un modo per trovare il nome della colonna da un alias?

    Ricerca

    Dopo alcune ricerche sembra che gli alias siano aggiunti dopo la clausola WHERE.

    Esempio
    SELECT profile.id AS id, given.name AS 'given_name', family.name AS 'family_name'
    FROM green_profile profile 
    LEFT JOIN green_name given ON given.profileid = profile.id AND given.name_typeid = 0 
    LEFT JOIN green_name family ON family.profileid = profile.id AND family.name_typeid = 1 
    WHERE given_name LIKE 'levi%' 
    ORDER BY given_name DESC LIMIT 0 , 25
    
    .

È stato utile?

Soluzione

Non testato, ma questo hack dovrebbe funzionare ...

SELECT * FROM (  
    SELECT profile.id AS id, given.name AS 'given_name', family.name AS 'family_name'
    FROM green_profile profile 
    LEFT JOIN green_name given ON given.profileid = profile.id AND given.name_typeid = 0 
    LEFT JOIN green_name family ON family.profileid = profile.id AND family.name_typeid = 1   
) as temptable
WHERE given_name LIKE 'levi%' 
ORDER BY given_name DESC LIMIT 0 , 25
.

Funziona semplicemente creando una tabella temporanea dall'istruzione Select originale (senza la clausola e l'ordine), che ha i nomi delle colonne specificati.Quindi seleziona da questo con i nomi delle colonne che desideri.

Un approccio migliore potrebbe essere quello di creare una vista, con i nomi delle colonne che desideri e selezionare dalla vista ...

CREATE VIEW newtable AS
SELECT profile.id AS id, given.name AS 'given_name', family.name AS 'family_name'
FROM green_profile profile 
LEFT JOIN green_name given ON given.profileid = profile.id AND given.name_typeid = 0 
LEFT JOIN green_name family ON family.profileid = profile.id AND family.name_typeid = 1;
.

E poi ...

SELECT * FROM newtable
WHERE given_name LIKE 'levi%' 
ORDER BY given_name DESC LIMIT 0 , 25
.

Altri suggerimenti

È possibile utilizzare solo alias colonna in gruppo da, ordinare o con clausole.

SQL standard non consente di fare riferimento a un alias di colonna in una clausola dove.Questa restrizione è imposta perché quando il codice in cui viene eseguito, il valore della colonna potrebbe non essere ancora determinato.

In dubbio, è sufficiente fare riferimento alla colonna per numero:

...
ORDER BY 2
...
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top