Rumah > Soal Jawab > teks badan
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
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