我有使用旧的和不推荐的(+)表示法的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
希望这是有道理的。我认为这与其他类似问题略有不同,因为它们没有涵盖同一查询中的多个联接
答案 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
我从不使用可选(即冗余)inner
和outer
关键字,或right join
(因为您可以随时将其反转以使其成为正常left join
并避免很多困惑)。