我在使用显式连接重写这些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)
我只想确保从隐式连接到显式连接的转换在逻辑上是正确的(对于我的教育和理解).为了记录,我可以保留隐式连接,但我只是想更好地理解这个过程.
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.我更喜欢这些较长的短语,因为它们更明确.