Gabungkan dua jadual dengan bilangan lajur yang berbeza
P粉879517403
P粉879517403 2023-08-24 18:54:05
0
2
474
<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粉879517403
P粉879517403

membalas semua(2)
P粉670107661

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粉662361740

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
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!