2010-02-22 68 views
64

Tôi có hai bảng (Bảng A và Bảng B).Liên kết hai bảng với số cột khác nhau

Chúng có số lượng cột khác nhau - Giả sử Bảng A có nhiều cột hơn.

Làm cách nào để kết hợp hai bảng này và nhận giá trị rỗng cho các cột mà Bảng B không có?

Trả lời

131

Thêm cột phụ như null cho bảng có cột ít như

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

Có cách nào để điền vào một giá trị mặc định cho cột Null không? – Hans

+2

@Hans: Bạn có thể làm điều gì đó như isnull (ColumnName, 0) dưới dạng ColumnName hoặc isnull (ColumnName, '-') dưới dạng ColumnName hoặc một cái gì đó tương tự. – Kangkan

+3

Bạn cũng có thể thực hiện: chọn 'Một số giá trị tùy chỉnh' là [Col1] ... –

4

Tôi đến đây và sau đó trên câu trả lời. Nhưng không khớp trong thứ tự loại dữ liệu gây ra lỗi. Mô tả dưới đây từ một câu trả lời khác sẽ hữu ích.

Kết quả trên có giống với chuỗi các cột trong bảng của bạn không? bởi vì oracle là nghiêm ngặt trong các lệnh cột. Ví dụ dưới đây tạo ra một lỗi:

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-01.790: biểu hiện phải có cùng một kiểu dữ liệu như biểu

tương ứng Như bạn thấy nguyên nhân gốc rễ của lỗi này là trong cột đặt hàng mismatching được ngụ ý bằng cách sử dụng * làm thông số danh sách cột. Loại lỗi này có thể dễ dàng tránh được bằng cách nhập danh sách cột một cách rõ ràng:

chọn col_a, col_b, col_c từ test1_1790 union all select col_a, col_b, col_c from test2_1790; Một kịch bản thường xuyên hơn cho lỗi này là khi bạn vô tình trao đổi (hoặc chuyển) hai hoặc nhiều cột trong danh sách SELECT:

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

HOẶC nếu ở trên không giải quyết vấn đề của bạn, làm thế nào về việc tạo ra một ALIAS trong các cột như thế này: (truy vấn là không giống như bạn nhưng các Vấn đề ở đây là làm thế nào để thêm bí danh trong cột.)

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

nếu chỉ có 1 hàng, bạn có thể sử dụng tham gia

Select t1.Col1, t1.Col2, t1.Col3, t2.Col4, t2.Col5 from Table1 t1 join Table2 t2; 
+0

Một liên kết của hai bảng 1 hàng (hai quan hệ nhiều bộ với một bộ) sẽ có hai hàng (tuple) trong quan hệ kết quả. Trong đại số quan hệ (mà SQL không phải là) kết quả công đoàn _might_ là một hàng, mặc dù chỉ khi hai quan hệ đầu vào chứa một tuple giống hệt nhau, ví dụ. tự kết hợp một mối quan hệ một tuple. –

Các vấn đề liên quan