2017-06-20 62 views
0

在Oracle中,以下MINUS SQL語句返回結果,而所謂的等價OUTER JOIN語句不返回任何結果。Oracle - MINUS運算符與OUTER JOIN的結果不同

結果:

SELECT 
    /*+parallel (8)*/ 
    pd.item_id 
FROM [email protected]_LINK_PROD_ENV 
WHERE pd.valid_to='09.09.9999' 
MINUS 
SELECT 
    /*+parallel (8)*/ 
    it.item_id 
FROM [email protected]_LINK_TEST_ENV 
WHERE it.valid_to='09.09.9999' ; 

無結果:

SELECT 
    /*+parallel (8)*/ 
    pd.item_id, 
    it.item_id 
FROM [email protected]_LINK_PROD_ENV 
LEFT OUTER JOIN [email protected]_LINK_TEST_ENV 
ON pd.item_id  = it.item_id 
WHERE it.valid_to ='09.09.9999' 
AND pd.valid_to ='09.09.9999' 
AND it.item_id IS NULL; 

不知道的數據,可能是什麼原因?

+1

你在說什麼「相交」你不是指「減」嗎? – philipxy

回答

1

在第一個查詢中,它是MINUS。意味着它將顯示DB_LINK_PROD_ENV中存在的所有item_id,其中valid_to = '09.09.9999',但不存在於具有valid_to = '09.09.9999'的DB_LINK_TEST_ENV中。
第二個是帶有AND條件的LEFT JOIN

it.valid_to ='09.09.9999' 
AND pd.valid_to ='09.09.9999' 


因此,有可能有在DB_LINK_PROD_ENV記錄有失效日期= '09 .09.9999' ,但在NO任何DB_LINK_TEST_ENV紀錄=失效日期09 .09.9999' 。
因此,當您在第一個查詢中執行MINUS時,它將顯示DB_LINK_PROD_ENV中的記錄。但在第二個查詢AND條件將無法給你任何記錄。