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'
以下是表格emp
和dept
的示例:
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使用(+)进行左外连接的主要内容,如果未能解决你的问题,请参考以下文章