如何将隐式连接重写为显式连接?

dgi*_*s82 3 sql oracle

我在使用显式连接重写这​​些JOINS时遇到了一些麻烦.我试图了解这是如何实现的.这是我继承的使用隐式连接的原始查询:

FROM prod.f31122 t,
       prod.f4801   wo,
       prod.f30008  r,
       prod.f0101   ab
WHERE t.wtdoco = wo.wadoco(+)
   and t.wtmmcu = wo.wammcu(+)
   and t.wtmmcu = r.iwmcu
   and t.wtan8 = ab.aban8
Run Code Online (Sandbox Code Playgroud)

我尝试了以下内容,但是我得到了不同的结果集.相同的计数,但结果集不正确(可能是我的分组没有显示的问题).这是我使用显式连接的翻译:

FROM prod.f31122 t      
JOIN prod.f4801 wo ON t.wtdoco = wo.wadoco
JOIN prod.f4801 wo ON wo.wammcu = t.wtmmcu 
JOIN prod.f30008 r ON t.wtmmcu = r.iwmcu 
JOIN prod.f0101 ab ON t.wtan8 = ab.aban8 
Run Code Online (Sandbox Code Playgroud)

我只想确保从隐式连接到显式连接的转换在逻辑上是正确的(对于我的教育和理解).为了记录,我可以保留隐式连接,但我只是想更好地理解这个过程.

mat*_*guy 5

FROM prod.f31122 t      
LEFT JOIN prod.f4801 wo ON t.wtdoco = wo.wadoco AND wo.wammcu = t.wtmmcu 
JOIN prod.f30008 r ON t.wtmmcu = r.iwmcu 
JOIN prod.f0101 ab ON t.wtan8 = ab.aban8 
Run Code Online (Sandbox Code Playgroud)

wo只加入一次,并且两个连接条件出现在同一ON子句中,AND它们之间使用逻辑运算符.

LEFT JOIN也可以写成LEFT OUTER JOIN,JOIN也可以写成INNER JOIN.我更喜欢这些较长的短语,因为它们更明确.