Oracle使用(+)进行左外连接

时间:2018-03-06 17:34:25

标签: sql oracle left-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_types的记录,以及具有'UPDATE DETAIL'作为trans_type的记录显示user_id

我需要这个来使用Oracle(+)语法,这就是我对这个来源的看法 - https://chartio.com/resources/tutorials/left-and-right-joins-using-the-plus-sign-in-oracle/#performing-outer-joins-using-the-symbol

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'

以外的任何行

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

1 个答案:

答案 0 :(得分:3)

需要在条件中包含(+)运算符

较旧的外部联接方法要求您在文字上包含(+)运算符。

只要把你的“复古”精神上限放回去,然后回到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 Applications商店只使用这种旧的外连接方法。