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

Alias ​​di colonna in una clausola WHERE

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 dalla tua istruzione select originale (senza la clausola where e l'ordinamento), che ha i nomi di colonna specificati. Quindi seleziona da questo con i nomi di colonna che desideri.

Un approccio migliore potrebbe essere quello di creare una vista, con i nomi di colonna desiderati, e selezionarla 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