Мне кажется, что ваш синтаксис неправильный.
AND br_data.last_note_user=as_users.userid(+)
AND br_data.user_ten = br_fx.iso_src(+)
... означает, что вы сохраняете все строки из br_data, даже если у них нет совпадений в других строках. Это было бы похоже на использование RIGHT JOIN в первом запросе.
Фактически, предложение WHERE удаляет все NULL, введенные LEFT JOIN, превращая ваше OUTER JOIN в INNER соединение.
left outer join br_data
ON (as_users.userid = br_data.last_note_user AND br_fx.iso_src = br_data.user_ten)
WHERE br_data.state=3
Я бы очень хотел, чтобы вы сообщили нам, что вы на самом деле хотите от вашего запроса.
Это так?
SELECT bs_accts.acct_num,
bs_accts.acct_name,
br_data.record_id ,
as_users.username,
br_fx.fx_rate
FROM
br_data
join
bs_accts
on (br_data.acct_id = bs_accts.acct_id)
AND (bs_accts.acct_currency='SHS')
AND substr(bs_accts.acct_num,1,1)='T'
AND br_data.state=3
LEFT JOIN
as_users
ON br_data.last_note_user=as_users.userid
LEFT JOIN
br_fx
ON br_data.user_ten = br_fx.iso_src
AND br_fx.iso_dst = 'USD';
... где вы хотите объединить br_data и bs_accts (на все эти разные вещи), а затем подключиться к as_users и br_fx, но не исключать ничего из объединения br_data и bs_accts?
Rob