Oracle 右外连接
Posted
技术标签:
【中文标题】Oracle 右外连接【英文标题】:Oracle right outer join 【发布时间】:2011-05-17 16:12:24 【问题描述】:我有一个 oracle sql,我在其中执行帐户表和付款表之间的外部联接。我想知道仅当付款表中有匹配记录时如何执行条件 p.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'
问候, -阿南德
【问题讨论】:
【参考方案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'
^^^
【讨论】:
舒里克-谢谢。我们如何使用您建议的方法检查多个值?例如AND p.payment_status_code(+) IN ('R', 'O') 不起作用【参考方案2】:如果我理解正确,您只想用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)
【讨论】:
嗨 jmsia - 即使没有付款,我也想显示帐户信息,即使没有付款信息,我使用的外部连接也会给我帐户信息。【参考方案3】: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')
【讨论】:
RedFilter - 感谢您的快速回复。实际上 payment_status_code 也可以有空值,我只想要那些带有“R”代码的记录。你能告诉我我们做到了吗? 上面的查询应该满足你的要求。如果没有,可能会发布示例数据和所需的输出。以上是关于Oracle 右外连接的主要内容,如果未能解决你的问题,请参考以下文章