我有一个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将它们联合起来。所有的表都有一个日期列,但在每个表中它的名称都不同。但是我想对美联航的记录执行WHERE,因此我需要始终使用相同的列名
发布于 2014-12-02 02:57:53
你问:“有没有办法按我想要的方式做?”
是的,但它需要使用子查询或视图。
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 Order of Operations?
因此,现在我必须做一些研究,以找出哪一个是正确的;或者它是否因RDBMS而异…
因此,where子句是在计算select之前执行的。因此,它还不知道您对它进行了别名处理。您可以通过子选择在from子句中按照您想要的方式创建数据列,从而欺骗编译器。
发布于 2014-12-02 03:00:32
如果一定要使用别名作为选择条件的一部分,则需要使用HAVING而不是WHERE
SELECT created_at as date FROM table HAVING date = 'xxxx-xx-xx'但是最好使用列名和WHERE,因为其他阅读您的代码的人会发现WHERE的含义比HAVING更明显;而且它也不能有效地使用您的表索引
发布于 2014-12-02 03:00:55
其中别名不起作用..最好使用table_name.column_namem,您可以在group by中使用列的别名。
SELECT created_at FROM table WHERE table.created_at = 'xxxx-xx-xx' <--more readable, isn't it?https://stackoverflow.com/questions/27235152
复制相似问题