2011-11-07 13 views
1

我偶然發現了一個有趣的(對我)查詢,我不確定它的功能。mysql FROM子句中的「AS」是否可選?

SELECT SQL_CALC_FOUND_ROWS DISTINCT P.* FROM table P WHERE P.status = ... 

的問題是在考慮到P具體FROM table P。我知道在FROM子句中可以使用AS子句,但這個特定的查詢不能。單詞AS是可選的嗎?

回答

4

定義別名並不總是可選的,但是當您確定別名時,關鍵字AS始終是可選的。

table_factor: 
    tbl_name [PARTITION (partition_names)] 
     [[AS] alias] [index_hint_list] 
    | table_subquery [AS] alias 
    | (table_references) 
    | { OJ table_reference LEFT OUTER JOIN table_reference 
     ON conditional_expr } 

來源:JOIN Syntax

定義列別名時AS關鍵字也是可選的:

的AS與標識符

源混疊一個select_expr當關鍵字是可選的:SELECT Syntax

1

在這種情況下,它不是必需的,但還有其他一些情況,例如將派生表連接到需要的地方。

1

從歷史上看,支持有點混雜,但現在已成爲每個人都支持的標準,並且對於名稱衝突解決方案至關重要(從同名域中選擇多個表)。給混合/計算/虛擬域賦予別名也非常棒!

在一天結束時,它是「必需的」,否則它是明確的。