使用UNION的CREATE TABLE SELECT的Mariadb問題排除
P粉115840076
P粉115840076 2023-08-02 11:25:48
0
1
558
<p>我正在處理一個包含六個UNION SELECT的PHP腳本,並且在腳本中這個命令運行得很好。從SQL客戶端執行時,這個指令也能正常運作。然而,當我嘗試將SELECT語句放在CREATE TABLE mytable SELECT的內部時,我得到了以下錯誤訊息:</p> <pre class="brush:php;toolbar:false;">Incorrect column name ''</pre> <p>在六個UNION SELECT的片段中,有五個片段中存在一個名為''的列名,該列名在腳本的後續部分填充資料時作為佔位符使用。但在其中一個UNION中,同樣的位置是一個varchar(32)列。 <br /><br />似乎在正常執行的命令中並不在乎存在一個"匿名"欄位。但在CREATE TABLE版本中,它不喜歡這樣。 <br /><br />為什麼SELECT和CREATE TABLE SELECT對於union欄位名稱有不同的規則? </p><p><br /></p>
P粉115840076
P粉115840076

全部回覆(1)
P粉821231319

Tables不能包含空白或缺少的列名,而結果集可以。而CREATE TABLE SELECT語句會從SELECT語句的結果集中取得表格的列名。因此,您需要確保結果集的每個列都有一個名稱,可以是從某個表的列派生出來的,也可以是透過AS別名指定的。例如,

SELECT 'one' AS tablename, cola, colb, colc FROM table_one
 UNION ALL
SELECT 'two',              cola, colb, colc FROM table_two
 UNION ALL
SELECT 'three',            cola, colb, colc FROM table_three

適用於CREATE TABLE語句,而

SELECT 'one',   cola, colb, colc FROM table_one
 UNION ALL
SELECT 'two',   cola, colb, colc FROM table_two
 UNION ALL
SELECT 'three', cola, colb, colc FROM table_three

不適用,因為它沒有給第一列一個別名列名。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板