首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql在where子句中使用列别名

问Mysql在where子句中使用列别名
EN

Stack Overflow用户
提问于 2014-12-02 02:50:32
回答 3查看 1.9K关注 0票数 0

我有一个Mysql查询:

代码语言:javascript
复制
SELECT created_at as date FROM table

因此,我为created_at列创建了一个别名。现在我想在WHERE子句中使用这个别名:

代码语言:javascript
复制
SELECT created_at as date FROM table WHERE date = 'xxxx-xx-xx'

这不起作用。Mysql希望我使用真实的列名。有没有办法按照我想要的方式去做?

背景:我正在从多个表中选择记录,并使用UNION将它们联合起来。所有的表都有一个日期列,但在每个表中它的名称都不同。但是我想对美联航的记录执行WHERE,因此我需要始终使用相同的列名

EN

回答 3

Stack Overflow用户

发布于 2014-12-02 02:57:53

你问:“有没有办法按我想要的方式做?”

是的,但它需要使用子查询或视图。

代码语言:javascript
复制
SELECT date 
FROM  (SELECT created_at as date FROM table) B
WHERE date = 'xxxx-xx-xx'

以工会为例..。

代码语言:javascript
复制
SELECT * from (
Select col1, col2,col3 as date from A
union
select col1, col4,col5 from B) inlineView
WHERE date = 'somedate'

您遇到的问题是数据库中的操作顺序。

  1. FROM子句
  2. WHERE子句
  3. GROUP BY子句
  4. HAVING子句
  5. SELECT子句
  6. ORDER BY子句

(顺序取自http://www.bennadel.com/blog/70-sql-query-order-of-operations.htm)找到不同的顺序MySQL Order of Operations?

因此,现在我必须做一些研究,以找出哪一个是正确的;或者它是否因RDBMS而异…

因此,where子句是在计算select之前执行的。因此,它还不知道您对它进行了别名处理。您可以通过子选择在from子句中按照您想要的方式创建数据列,从而欺骗编译器。

票数 1
EN

Stack Overflow用户

发布于 2014-12-02 03:00:32

如果一定要使用别名作为选择条件的一部分,则需要使用HAVING而不是WHERE

代码语言:javascript
复制
SELECT created_at as date FROM table HAVING date = 'xxxx-xx-xx'

但是最好使用列名和WHERE,因为其他阅读您的代码的人会发现WHERE的含义比HAVING更明显;而且它也不能有效地使用您的表索引

票数 1
EN

Stack Overflow用户

发布于 2014-12-02 03:00:55

其中别名不起作用..最好使用table_name.column_namem,您可以在group by中使用列的别名。

代码语言:javascript
复制
  SELECT created_at  FROM table WHERE table.created_at = 'xxxx-xx-xx'  <--more readable, isn't it?
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27235152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档