sql >> Database >  >> RDS >> Mysql

Kolomalias in een WHERE-clausule

Niet getest, maar deze hack zou moeten werken...

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

Het werkt door simpelweg een tijdelijke tabel te maken van uw oorspronkelijke select-statement (zonder de where-clausule en volgorde), die de kolomnamen heeft die u opgeeft. U selecteert hier vervolgens uit met de gewenste kolomnamen.

Een betere benadering zou kunnen zijn om een ​​weergave te maken, met de kolomnamen die u wilt, en uit de weergave te selecteren...

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;

En dan...

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


  1. Geheugenlek in PHP bij het ophalen van grote dataset uit MySQL

  2. Postgresql 9.x:Index om `xpath_exists` (XMLEXISTS)-query's te optimaliseren

  3. SQL-resultaten groeperen per maand

  4. MySql selecteert alle rijen in een tabel op basis van de MAX-waarde in een andere tabel