如何使用多连接转换旧的Oracle(+)

时间:2018-01-03 17:13:46

标签: sql oracle

我有使用旧的和不推荐的(+)表示法的Oracle sql代码。我对如何转换有基本的了解,但我正在努力解决多个表。

例如

select [list of columns]
from table1 t1,
     table2 t2,
     table3 t3,
     table4 t4,
     table5 t5
where t2.col1 = t1.col1
and t2.col2 = t3.col2
and t4.col1(+) = t2.col3
and t5.col1(+) = t2.col4
and t5.col2(+) = t2.col5

希望这是有道理的。我认为这与其他类似问题略有不同,因为它们没有涵盖同一查询中的多个联接

2 个答案:

答案 0 :(得分:0)

class inputWithIncrementView : UIView, UITextFieldDelegate {
    var inputName : String // This is the property I want to receive and init

override init (frame : CGRect) {
    super.init(frame : frame)
    // [this is where i will use the inputName property passed on initialization] 
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder) 
}
// [other functions and stuff working fine here]
}

会转换为

t4.col1(+) = t2.col3

但是因为table2应该首先连接到table1,所以使用更常见的LEFT连接并翻转表格会更清晰:

RIGHT OUTER JOIN table2 t2 on t4.col1 = t2.col3

答案 1 :(得分:0)

将每个联接条件从WHERE子句移动到相应的JOIN

select [list of columns]
from   table1 t1
       join table2 t2
            on  t2.col1 = t1.col1
       join table3 t3
            on  t3.col2 = t2.col2
       left join table4 t4
            on  t4.col1 = t2.col3
       left join table5 t5
            on  t5.col1 = t2.col4
            and t5.col2 = t2.col5

我从不使用可选(即冗余)innerouter关键字,或right join(因为您可以随时将其反转以使其成为正常left join并避免很多困惑)。