Oracle правое внешнее соединение - PullRequest
0 голосов
/ 17 мая 2011

У меня есть оракул 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'

С уважением, -Anand

Ответы [ 3 ]

1 голос
/ 17 мая 2011
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 голос
/ 17 мая 2011

Если я вас правильно понимаю, вы хотите показывать результаты только с 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 голосов
/ 17 мая 2011
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')
...