Oracle加入一个表或另一个表

时间:2018-05-17 13:30:21

标签: sql oracle

有没有办法完成以下任务:

so=# CREATE TABLE validity (
  w INTERVAL NOT NULL
);
CREATE TABLE
so=# insert into validity values ('3 days 01:00:00');
INSERT 0 1

所以,我知道SMART_PERSON和COOL_PERSON都有一个PERSON_OID,以及两个表之间共享的一堆其他列。目前我有一个非常大的查询,即UNIONing这两个表之间的结果,但我想知道的是,是否有办法说“加入PERSON_OID存在于哪个表中”?这样我就不需要UNION完全相同的查询,唯一的区别在于我加入COOL_PERSON,而另一个我加入了SMART_PERSON。希望这是有道理的。

1 个答案:

答案 0 :(得分:1)

解决方案是两个left join s:

select p.*, coalesce(cp.col1, sp.col1) as col1,
       coalesce(cp.col2, sp.col2) as col2,
       . . .
from person p left join
     cool_person cp
     on p.oid = cp.person_oid left join
     smart_person sp
     on p.oid = sp.person_oid and cp.person_oid is null;

这应该比union方法具有更好的性能。但是,您应该考虑修复数据模型。公共列可能应该放在person