cari

Rumah  >  Soal Jawab  >  teks badan

Gabungkan dua jadual dengan bilangan lajur yang berbeza

<p>Saya mempunyai dua jadual (Jadual A dan Jadual B). </p> <p>Kedua-dua jadual mempunyai bilangan lajur yang berbeza - dengan mengandaikan jadual A mempunyai lebih banyak lajur. </p> <p>Bagaimanakah saya boleh menggabungkan kedua-dua jadual ini dan mendapatkan nilai nol pada lajur yang tidak ada pada jadual B? </p>
P粉879517403P粉879517403459 hari yang lalu547

membalas semua(2)saya akan balas

  • P粉670107661

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

    Saya datang ke sini dan ikut jawapan di atas. Tetapi ketidakpadanan susunan jenis data mengakibatkan ralat. Penerangan di bawah daripada jawapan lain akan membantu.

    Adakah keputusan di atas dalam susunan yang sama dengan lajur dalam jadual anda? Kerana Oracle sangat ketat pada susunan lajur. Contoh berikut akan menghasilkan ralat:

    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: ungkapan mesti mempunyai jenis data yang sama dengan ungkapan yang sepadan

    Seperti yang anda lihat, punca ralat terletak pada ketidakpadanan susunan lajur yang tersirat dengan menggunakan * sebagai penentu senarai lajur. Ralat jenis ini boleh dielakkan dengan mudah dengan memasukkan senarai lajur secara eksplisit:

    pilih col_a, col_b, col_c daripada test1_1790 kesatuan semua pilih col_a, col_b, col_c daripada test2_1790; Situasi yang lebih biasa untuk ralat ini ialah apabila anda secara tidak sengaja menukar (atau mengalihkan) dua atau lebih lajur dalam senarai PILIH:

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

    Atau, jika perkara di atas tidak menyelesaikan masalah anda, bagaimana pula dengan mencipta alias dalam lajur , seperti ini: (Pertanyaan berbeza daripada anda, tetapi perkara di sini ialah cara menambah alias dalam lajur.)

    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

    balas
    0
  • P粉662361740

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

    Untuk jadual dengan kurang lajur, anda boleh menambah lajur kosong tambahan, contohnya:

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

    balas
    0
  • Batalbalas