1
我有這樣一個查詢(在現實中更多的列)集團通過聲明列名稱解析
select
custom_amend_column_function(colname) as colname
from source_table
group by colname
我用這個構造lot.It似乎一直使用從該函數的輸出,而不是輸入來按數據分組數據。 現在,第一次,今天我已經直接運行該語句到一個新表是這樣的:
create table new_table as
select
custom_amend_column_function(colname) as colname
from source_table
group by colname
奇怪的是,加入的第一行,我得到我的查詢使用曖昧列名稱的錯誤信息集團聲明。
由於group by可以使用新的列名(即下面的工作),我總是期望group by將首先使用select語句中定義的列,然後查看基礎表(如果找不到名。
select
custom_amend_column_function(colname) as new_colname
from source_table
group by new_colname
對嗎?錯誤信息是否正確?我無法找到任何有關SQL標準或MySQL的文檔。
我知道我可以通過創建一個新的列名來避免這種情況,但是我想知道這一點,因爲如果確實含糊不清,可能需要查看現有查詢。
這是不正確的。 'CREATE TABLE .. AS'通常只使用查詢結果。一旦成功,創作就會完成。更多的,在你的情況下,「GROUP BY」將使用__original column__來對該函數的數據和__not__輸出進行分組。證明:[for 5.6](http://sqlfiddle.com/#!9/e663c/1); [for 5.5](http://sqlfiddle.com/#!2/e663c/1); [對於5.1](http://sqlfiddle.com/#!8/e663c/1) - 正如你所看到的,它對DDL和名稱解析都能正常工作,這將由原始列執行(因爲我們可能會看到多行爲相同的功能輸出,但不同的原始值) – 2014-09-04 10:30:47
正如我在問題中說我*從未驗證*如果分組的結果是基於表列或查詢輸出,但做了一個假設。在查詢開始處添加'create table [table_name] as'明確地向查詢添加了一個警告,表明列定義不明確。如果後者確實如此......。 1)爲什麼只有在創建表時而不是在運行select時纔會出現此警告2)是否在任何位置記錄了表列與查詢列的優先級? – Hans 2014-09-04 12:33:16