繁体   English   中英

Oracle使用(+)进行左外部联接

[英]Oracle using (+) for left outer join

我有使用外部左自我联接的此查询,它显示了我期望的结果:

SELECT c.date, u.user_id from order_detail_trans c
LEFT OUTER JOIN order_detail_trans u
ON u.trans_id = c.trans_id
AND u.trans_type = 'UPDATE DETAIL'

我将一个表自身连接起来,因为我只希望为那些trans_type为“ UPDATE DETAIL”的行填充我的一列(user_id),但是仍然需要显示该表中的行,而这不是trans类型。 上面的查询似乎可以解决问题。 我同时获得了具有trans_types和以'UPDATE DETAIL'作为trans_type显示user_id的记录

我需要使用它来与Oracle(+)语法一起使用,这就是我从本源中获取的内容-https://chartio.com/resources/tutorials/left-and-right-joins-using-the-plus在符号Oracle中/#performing-outer-joins使用该符号

SELECT c.date, u.user_id from order_detail_trans c, order_detail_trans u
WHERE u.trans_id(+) = c.trans_id
AND u.trans_type = 'UPDATE DETAIL'

但这不会显示带有trans_type而不是'UPDATE DETAIL'以外的行。

用(+)语法重写第一个查询以呈现相同结果的正确方法是什么?

需要在文字条件上包含(+)运算符

旧的外部联接方法要求您为文字上的条件包括(+)运算符。

只需戴上您的“复古”精神帽,然后回到90年代。 :)

这种方法的外观如下:

SELECT
    c
.DATE,
 u.user_id
FROM
    order_detail_trans c,
    order_detail_trans u
WHERE
    u.trans_id (+) = c.trans_id
    AND   u.trans_type (+) = 'UPDATE DETAIL'

这是表empdept的示例:

SCOTT@db>SELECT
  2      d.deptno,
  3      e.job
  4  FROM
  5      dept d
  6      LEFT OUTER JOIN emp e ON d.deptno = e.deptno
  7      and e.job = 'CLERK'
  8  GROUP BY
  9      d.deptno,
 10      e.job
 11  ORDER BY
 12      1,
 13      2;
  DEPTNO JOB     
      10 CLERK   
      20 CLERK   
      30 CLERK   
      40         


SCOTT@db>SELECT
  2      d.deptno,
  3      e.job
  4  FROM
  5      dept d,
  6      emp e
  7  WHERE
  8      d.deptno = e.deptno (+)
  9   AND e.job (+) = 'CLERK'
 10  GROUP BY
 11      d.deptno,
 12      e.job;
  DEPTNO JOB     
      20 CLERK   
      30 CLERK   
      10 CLERK   
      40    

信不信由你,我相信大多数Oracle应用产品商店都只使用这种较旧的外部联接方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM