问题
我在查询中使用备用列名(别名),我可以将别名“given_name”用作 ORDER BY 的一部分,但无法将其用作 WHERE 子句的一部分。 WHERE“given_name”是作为我无法控制的请求的结果传入的,我不知道应该在 WHERE 条件中使用的实际列名。
问题
- 有没有办法/技巧在 WHERE 子句中使用列别名?
- 有没有办法从别名中找到列名?
研究
经过一些研究,看起来好像在 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
最佳答案
未经测试,但这个 hack 应该有效......
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
它的工作原理是从您的原始 select 语句(没有 where 子句和排序)简单地创建一个临时表,该表具有您指定的列名。然后,您可以从中选择所需的列名。
更好的方法可能是创建一个 View ,其中包含您想要的列名,然后从 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;
然后……
SELECT * FROM newtable
WHERE given_name LIKE 'levi%'
ORDER BY given_name DESC LIMIT 0 , 25
关于mysql - WHERE 子句中的列别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9664657/