WHERE子句中的列别名

Lev*_*tna 6 mysql alias alternate

问题

我在查询中使用备用列名(化名),我可以使用别名"GIVEN_NAME"由订单的一部分,但我无法使用它作为WHERE子句的一部分.WHERE"given_name"作为请求的结果传入我的控件之外,我不知道应该在WHERE条件中使用的实际列名.

  1. 有没有办法/黑客在WHERE子句中使用列别名?
  2. 有没有办法从别名中找到列名?

研究

经过一些研究后,看起来在WHERE子句之后添加了别名.

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
Run Code Online (Sandbox Code Playgroud)

Bil*_*oon 4

未经测试,但这个黑客应该有效......

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
Run Code Online (Sandbox Code Playgroud)

它的工作原理是简单地从原始 select 语句(没有 where 子句和排序)创建一个临时表,其中包含您指定的列名。然后,您可以从中选择所需的列名称。

更好的方法可能是创建一个视图,其中包含所需的列名称,然后从视图中进行选择...

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;
Run Code Online (Sandbox Code Playgroud)

进而...

SELECT * FROM newtable
WHERE given_name LIKE 'levi%' 
ORDER BY given_name DESC LIMIT 0 , 25
Run Code Online (Sandbox Code Playgroud)