首頁  >  問答  >  主體

使用UNION的CREATE TABLE SELECT的Mariadb問題排除

<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粉115840076P粉115840076417 天前506

全部回覆(1)我來回復

  • P粉821231319

    P粉8212313192023-08-03 09:31:45

    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
    

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

    回覆
    0
  • 取消回覆