2011-05-17 63 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