Oracle:使用或子句替换的外连接(+)

时间:2017-07-19 13:51:47

标签: sql oracle select

我有一个巨大的选择,示意性地如下:

SELECT c_1, c_2, ..., c_j FROM t_1, t_2, ..., t_k
WHERE e_11 = e_12(+)
AND e_21 = e_22(+)
AND ...
AND e_l1 = e_l2(+)
ORDER BY o

其中jkl为数百,e_mn是某个表中的列。我需要从新表A_1中选择新列A_2T。新列通过表B中的列R连接到前一个选择。我希望那些行A_1 = BA_2 = B或那些没有对应A_i的行到值B

假设我只需要处理表TR,那么我想要这个:

SELECT * FROM R
LEFT OUTER JOIN T
ON (A_1 = B OR A_2 = B)

为了模仿这种行为,我想在大选中找到类似的东西:

SELECT c_1, c_2, ..., c_j, A_1, A_2 FROM t_1, t_2, ..., t_k, T
WHERE e_11 = e_12(+)
AND e_21 = e_22(+)
AND ...
AND e_l1 = e_l2(+)
AND (B = A_1(+) OR B = A_2(+))
ORDER BY o
但是,这在语法上是不正确的,因为(+)运算符不能与OR caluse一起使用。如果我遗漏了(+),我会丢失那些没有对应A_iB的行。

我有什么选择?我可以以某种方式找到一种方法来做而不用更改整个选择的主体吗?我怀疑是否有合理的方法来做到这一点,但我会感激任何帮助。

感谢。

0 个答案:

没有答案