mysql - WHERE 子句中的列别名

标签 mysql alias alternate

问题

我在查询中使用备用列名(别名),我可以将别名“given_name”用作 ORDER BY 的一部分,但无法将其用作 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

最佳答案

未经测试,但这个 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/

相关文章:

java - 在 Jasperreports 上拆分后获取第二个值

sql-server - 如何在多个 SELECT 输出中标记结果表

php - 键->值数据有哪些好的、快速的持久存储选项?

mysql - 根据计数从表中删除条目?

shell - shell 别名是否符合 POSIX 标准?

function - 为什么这个Powershell更改目录的功能不起作用?

java - 每周交替

colors - JasperReports 的交替行颜色

替代 YouTube 嵌入源的 JavaScript 函数? (无 iframe)

mysql - 哪个 mysql 系统变量影响 group by 子句?