Column Alias in a WHERE Clause

前端 未结 3 821
面向向阳花
面向向阳花 2021-01-12 17:27

Problem

I am using alternate column name (alias) in a Query, I can use the alias "given_name" as part of the ORDER BY but am unable to use it as part of t

3条回答
  •  星月不相逢
    2021-01-12 17:50

    Untested, but this hack should work...

    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
    

    It works by simply creating a temporary table from your original select statement (without the where clause and ordering), which has the column names you specify. You then select from this with the column names you want.

    A better approach might be to create a view, with the column names you want, and select from the view...

    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;
    

    And then...

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

提交回复
热议问题