2011-05-17 91 views
0

我有一個oracle sql,我在帳戶表和付款表之間進行外連接。我想知道如何僅在支付表中存在匹配記錄時執行條件p.payment_status_code ='R'。其餘的情況不應該執行。Oracle右外連接

FROM 
accounts a, payments p 
WHERE (a.account_balance <= a.low_balance_level OR a.account_balance <= 0) 
AND a.account_id = p.account_id(+) 
AND p.payment_status_code = 'R' 

問候, -Anand

回答

1
FROM 
accounts a, payments p 
WHERE (a.account_balance <= a.low_balance_level OR a.account_balance <= 0) 
AND a.account_id = p.account_id(+) 

AND p.payment_status_code(+) = 'R' 
         ^^^ 
+0

Schurik - 謝謝。我們如何使用您建議的方法檢查多個值? 例如AND p.payment_status_code(+)IN('R','O')不起作用 – Anand 2011-05-17 17:01:27

0
FROM 
accounts a, payments p 
WHERE (a.account_balance <= a.low_balance_level OR a.account_balance <= 0) 
AND a.account_id = p.account_id(+) 
AND (p.account_id is null or p.payment_status_code = 'R') 
+0

RedFilter - 感謝您的快速響應。實際上,payment_status_code也可以有空值,我只需要那些帶'R'代碼的記錄。你能讓我知道我們做到了嗎? – Anand 2011-05-17 16:20:23

+0

上面的查詢應該做你所要求的。也許發佈樣本數據和期望的輸出,如果它不。 – RedFilter 2011-05-17 16:24:16

1

如果我理解正確的話,你只想與payment_status_code = 'R'顯示的結果吧?在那種情況下,你爲什麼需要使用外連接?你可以使用傳統的連接。你想做什麼?

FROM 
accounts a, payments p 
WHERE (a.account_balance <= a.low_balance_level OR a.account_balance <= 0) 
AND a.account_id = p.account_id 
AND p.payment_status_code = 'R' 

如果你想顯示的帳戶信息,即便是沒有支付那麼你可以使用一個左外連接,而不是右外連接

FROM 
accounts a 
left join payments p on a.account_id = p.account_id AND p.payment_status_code = 'R' 
WHERE (a.account_balance <= a.low_balance_level OR a.account_balance <= 0) 
+0

嗨jmsia - 我想顯示帳戶信息,即使沒有付款的人和我使用的外部連接也給我帳戶信息,即使沒有付款信息。 – Anand 2011-05-18 15:39:34