有没有办法完成以下任务:
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。希望这是有道理的。
答案 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
。