簡體   English   中英

甲骨文離開外部聯接的問題

[英]Oracle left outer join issue

我在使用左外部聯接的報表SQL中遇到問題。

 SELECT * FROM xx.aa 
           LEFT OUTER JOIN xx.yyy
           ON aa.some_column_1 = yyy.some_column_1
           AND aa.some_column_2 = yyy.some_column_2
           AND aa.some_column_3 = yyy.some_column_3
           AND yyy.some_year = '2015'
           AND yyy.some_column_4 IS NOT NULL
           AND yyy.some_column_4 > 0
 WHERE aa.some_column_1 = '1234' 
   AND aa.some_column_2 = 'SOME_VALUE'
   AND aa.end_date >= TO_DATE('01-JAN-2015','DD-MON-YYYY')
   AND aa.start_date <= TO_DATE('31-DEC-2015','DD-MON-YYYY')
   AND (aa.some_column_3 = 'SOME_VALUE')

表aa

some_column_1 some_column_2 some_column_3 start_date end_date
1234          SOME_VALUE    SOME_VALUE    1/1/2011   6/30/2014
1234          SOME_VALUE    SOME_VALUE    7/1/2014   6/30/2015

表yyy

some_column_1 some_column_2 some_column_3 some_column_4 some_year
1234          SOME_VALUE    SOME_VALUE    444           2015

但是,僅當存在多於1行匹配且行中至少有一個滿足兩個條件時,才應應用左外部連接的最后兩個條件IS NOT NULL> 0 否則將是一個問題。

有任何想法嗎?

您應該在左聯接中不帶條件的情況下運行查詢,然后對條件進行判斷,以從yyy表中確定值是否為空。

select aa_col1, aa_col2, ..., aa_coln,
    case when cnt > 2 and cond > 1 
              and not (yyy_some_column_4 IS NOT NULL AND yyy_some_column_4 > 0) 
         then null else yyy_col1 
         end as yyy_col1,
    ,...the other columns of yyy
from(
    SELECT aa.*, yyy.*,
      count(*) over() as cnt,
      count(case when yyy.some_column_4 IS NOT NULL AND yyy.some_column_4 > 0  then 1 end) over() as cond
    FROM xx.aa 
    LEFT OUTER JOIN xx.yyy
        ON aa.some_column_1 = yyy.some_column_1
               AND aa.some_column_2 = yyy.some_column_2
               AND aa.some_column_3 = yyy.some_column_3
               AND yyy.some_year = '2015'
     WHERE aa.some_column_1 = '1234' 
       AND aa.some_column_2 = 'SOME_VALUE'
       AND aa.end_date >= TO_DATE('01-JAN-2015','DD-MON-YYYY')
       AND aa.start_date <= TO_DATE('31-DEC-2015','DD-MON-YYYY')
       AND (aa.some_column_3 = 'SOME_VALUE')
)

在第8行,您應該對列進行別名處理,以便它們在上方的選擇中區分開。 我將它們命名為aa_col1,yyy_col1等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM