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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle使用(+)进行左外连接相关的知识,希望对你有一定的参考价值。

我有使用外部左连接的此查询,它显示我期望的内容:

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-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'之外的任何行

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

答案

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

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

只需将你的“复古”精神上限放回并重新回到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商店只使用这种旧的外连接方法。

以上是关于Oracle使用(+)进行左外连接的主要内容,如果未能解决你的问题,请参考以下文章

添加 2 表条件时,Oracle 左外连接停止返回结果

Oracle左外连接问题

使用左外连接时 Oracle 分区修剪不起作用

oracle 左外连接如果右表中有重复数据如何处理?

ORACLE 左外连接问题(有空表?)

oracle左外连接不显示右空值