我有一个复杂的非 ansi 查询,我需要在 ansi 查询中进行转换。

所以我会举一个小例子来描述我的问题

输入查询

 SELECT a.name,
         a.empno,
         b.loc,
         c.inr
    FROM a,
         b,
         c
   WHERE a.deptno = b.deptno(+)
     AND b.empno(+) = 190
     a.deptno = c.deptno(+)
     AND c.empno(+) = 190;

提前致谢

最佳答案

您的查询等效于以下符合 ANSI 标准的查询:

SELECT a.name,
       a.empno,
       b.loc,
       c.inr
FROM tab a
LEFT JOIN tab b ON a.deptno = b.deptno AND b.empno = 190
LEFT JOIN tab c ON a.deptno = c.deptno AND c.empno = 190;

您必须将谓词 b.empno = 190c.empno = 190 放在 ON 操作的 LEFT JOIN 子句中,否则 LEFT JOIN 将成为 INNER JOIN

关于oracle - 将 Oracle 旧外连接转换为 Ansi SQL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40782925/

10-15 11:50