搜尋

首頁  >  問答  >  主體

將兩個不同列數的表格

<p>我有兩個表(表A和表B)。 </p> <p>這兩個表的列數不同 - 假設表A有更多的列。 </p> <p>我如何將這兩個表合併,並在表B沒有的列上取得null值? </p>
P粉879517403P粉879517403527 天前596

全部回覆(2)我來回復

  • P粉670107661

    P粉6701076612023-08-25 17:20:32

    我來到這裡並按照上面的答案操作。但是資料類型的順序不匹配導致了一個錯誤。下面來自另一個答案的描述會很有用。

    上面的結果與您的表格中的列順序相同嗎?因為Oracle在列順序上很嚴格。下面的範例會產生一個錯誤:

    create table test1_1790 (
    col_a varchar2(30),
    col_b number,
    col_c date);
    
    create table test2_1790 (
    col_a varchar2(30),
    col_c date,
    col_b number);
    
    select * from test1_1790
    union all
    select * from test2_1790;

    ORA-01790: 表達式必須具有與對應表達式相同的資料型別

    正如您所看到的,錯誤的根本原因在於透過使用*作為列列表指定符來暗示的列順序不符。透過明確輸入列列表,可以輕鬆避免這種類型的錯誤:

    select col_a, col_b, col_c from test1_1790 union all select col_a, col_b, col_c from test2_1790; 這種錯誤更常見的情況是當您在SELECT清單中無意中交換(或移動)兩個或多個欄位時:

    select col_a, col_b, col_c from test1_1790
    union all
    select col_a, col_c, col_b from test2_1790;

    或者,如果上述方法不能解決您的問題,那麼如何在列中建立一個別名呢,就像這樣:(查詢與您的查詢不同,但這裡的重點是如何在列中新增別名。)

    SELECT id_table_a, 
           desc_table_a, 
           table_b.id_user as iUserID, 
           table_c.field as iField
    UNION
    SELECT id_table_a, 
           desc_table_a, 
           table_c.id_user as iUserID, 
           table_c.field as iField

    回覆
    0
  • P粉662361740

    P粉6623617402023-08-25 15:53:13

    對於列較少的表,可以新增額外的空列,例如:

    Select Col1, Col2, Col3, Col4, Col5 from Table1
    Union
    Select Col1, Col2, Col3, Null as Col4, Null as Col5 from Table2

    回覆
    0
  • 取消回覆