我使用外部左连接进行此查询,它显示了我期望的内容:
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'
以外的任何行使用(+)语法重写第一个查询以呈现相同结果的正确方法是什么?
答案 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'
以下是表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商店只使用这种旧的外连接方法。