1

如何在 oracle 中进行自我外部加入?(我用的是 11g)

我尝试了以下查询,其中有很多 (+) 无处不在和 left/right 的组合:

select t1.name, t1.status, t2.status
from my_tab t1 outer join my_tab t2
on t1.name = t2.name
where t1.year= X and t2.year = Y and t1.status <> t2.status;

预期结果:在 X 年和 Y 年之间改变身份的人,以及新的人和失踪的人

只有改变状态的人


甲骨文的文档

您不能使用 (+) 运算符将表外连接到自身

它是否仅适用于 (+) 运算符,还是我应该阅读“您不能将表外部连接到自身”?

4

1 回答 1

0

肮脏的解决方案:

--request presented above
select t1.name, t1.status as status_X, t2.status as status_Y
from my_tab t1 join my_tab t2
on t1.name = t2.name
where t1.year = X and t2.year = Y and t1.status <> t2.status

union
--stuff that disappeared from X to Y
select name, status, null
from my_tab
where year = X and name not in (select name from my_tab where year = Y)

union
--new stuff
select name, null, status
from my_tab
where year = Y and name not in (select name from my_tab where year = X)
于 2012-11-06T16:55:03.903 回答