簡體   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