[英]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.