2010-06-04 43 views
1

SQL中,假設我需要引用having子句中的別名字段,但別名引號,我該怎麼做?SQL別名字段

select (select...) as '005' 
group by ... 
having '005'>0 
+0

什麼數據庫類型? – 2010-06-04 23:59:53

+0

數據庫類型爲MYSQL – user157195 2010-06-05 00:05:16

回答

4

我認爲你缺少FROM子句,你應該使用反引號,而不是單引號:

SELECT (SELECT ...) AS `005` 
FROM table1 
GROUP BY ... 
HAVING `005` > 0 

這將有助於如果您發佈完整的查詢,因爲我在這裏猜測了一下至於你想要做什麼。

+1

正如Mark所說,問題在於您使用的是單引號而不是反引號,這會將別名視爲字符串文字。在選擇部分中,別名可以使用普通引號,但在其他任何地方使用時,您需要使用後面的引號。 – 2010-06-05 00:18:58

+0

你們是對的,如果我使用反引號而不是單引號別名工作!,謝謝 – user157195 2010-06-05 00:24:13

2

SQL-92標準定義了對列別名使用雙引號而不是單引號。在大多數數據庫中,只有使用雙引號時才允許出現不尋常的字符。

也就是說,並非所有數據庫都支持在GROUP BYHAVING子句中引用列別名(在同一查詢中)。對於便攜式查詢,我不建議參考GROUP BYHAVING子句中的列別名。此外,HAVING子句用於聚合 - 您提供的簡化示例應該會觸發錯誤,因爲在005列別名上不執行聚合函數(IE:COUNT,AVG,MIN/MAX等)。

以下關於MySQL 4.1的作品對我來說:

SELECT COUNT(*) AS "005" 
    FROM TABLE t 
GROUP BY ... 
    HAVING `005` > 0