我有一个巨大的选择,示意性地如下:
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
其中j
,k
和l
为数百,e_mn
是某个表中的列。我需要从新表A_1
中选择新列A_2
和T
。新列通过表B
中的列R
连接到前一个选择。我希望那些行A_1 = B
或A_2 = B
或那些没有对应A_i
的行到值B
。
假设我只需要处理表T
和R
,那么我想要这个:
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_i
到B
的行。
我有什么选择?我可以以某种方式找到一种方法来做而不用更改整个选择的主体吗?我怀疑是否有合理的方法来做到这一点,但我会感激任何帮助。
感谢。