[英]Mysql use column alias in where clause
我有一个Mysql查询:
SELECT created_at as date FROM table
因此,我为created_at列创建了一个别名。 现在,我想在我的WHERE子句中使用此别名:
SELECT created_at as date FROM table WHERE date = 'xxxx-xx-xx'
这是行不通的。 Mysql希望我使用真实的列名。 有什么办法可以按照我的意愿去做吗?
背景:我正在从几个表中选择记录,并使用UNION
它们UNION
。 所有表都有一个日期列,但每个表中的名称都不同。 但是我想在统一记录上执行WHERE
操作,因此我需要始终使用相同的列名
如果您绝对必须使用别名作为选择条件的一部分,那么您需要使用HAVING
而不是WHERE
SELECT created_at as date FROM table HAVING date = 'xxxx-xx-xx'
但是最好使用列名和WHERE
因为其他人在阅读您的代码时会发现WHERE
的含义比HAVING
更明显; 而且它也不会有效地使用您的表索引
您问:“有什么方法可以按照我想要的方式进行吗?”
是的,但是需要使用子查询或视图。
SELECT date
FROM (SELECT created_at as date FROM table) B
WHERE date = 'xxxx-xx-xx'
以工会为例...
SELECT * from (
Select col1, col2,col3 as date from A
union
select col1, col4,col5 from B) inlineView
WHERE date = 'somedate'
您遇到的问题是数据库内的操作顺序。
(顺序取自http://www.bennadel.com/blog/70-sql-query-order-of-operations.htm )找到了不同的顺序MySQL操作顺序?
所以现在我必须做一些研究来找出哪一个是正确的; 还是因RDBMS而异...
因此,在评估select之前执行where子句。 因此,它还不知道您是否对其进行了别名。 您可以通过执行子选择,使数据列在from子句中成为所需的方式来欺骗编译器。
哪里对别名不起作用..最好使用table_name.column_namem,您可以在group by中使用列的别名。
SELECT created_at FROM table WHERE table.created_at = 'xxxx-xx-xx' <--more readable, isn't it?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.