bvi*_*ale 5 sql oracle join outer-join
我想FULL OUTER JOIN在几个列上使用两个表之间,但是当两个列都为null时,它们在连接期间不被视为相等,因此我获得两个不同的行.如何编写连接,所以null列被认为是相等的?
我已经设置了一个简化的例子:
create table t1 (
id number(10) NOT NULL,
field1 varchar2(50),
field2 varchar2(50),
CONSTRAINT t1_pk PRIMARY KEY (id)
);
create table t2 (
id number(10) NOT NULL,
field1 varchar2(50),
field2 varchar2(50),
extra_field number(1),
CONSTRAINT t2_pk PRIMARY KEY (id)
);
insert into t1 values(1, 'test', 'test2');
insert into t2 values(1, 'test', 'test2', null);
insert into t1 values(2, 'test1', 'test1');
insert into t2 values(2, 'test1', 'test1', null);
insert into t1 values(3, 'test0', null);
insert into t2 values(3, 'test0', null, 1);
insert into t2 values(4, 'test4', 'test0', 1);
select *
from t1
full outer join t2 using (id, field1, field2);
Run Code Online (Sandbox Code Playgroud)
使用NVL()和唯一字符串来替换 NULL:
select t1.id,t1.field1,t1.field2,t2.extra_field
from t1
full outer join t2 ON
t1.id=t2.id
AND NVL(t1.field1,'UID_INSTEAD_OF_NULL')=NVL(t2.field1,'UID_INSTEAD_OF_NULL')
AND NVL(t1.field2,'UID_INSTEAD_OF_NULL')=NVL(t2.field2,'UID_INSTEAD_OF_NULL')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8209 次 |
| 最近记录: |