Вы смешиваете типы соединений; Oracle в старом стиле соединяется (с запятой), а соответствующие ANSI соединяются. Это приводит к тому, что условия проверяются в порядке, который вы не ожидаете, а некоторые из более ранних псевдонимов еще не существуют.
Парсер эффективно пытается сначала оценить эту часть самостоятельно:
iby_payments_all ibypa
INNER JOIN "ap_checks_all" aca
ON aca.check_id = ipa.check_id
AND aca.payment_id = ibypa.payment_id
INNER JOIN fun_all_business_units_v fun ON aia.org_id = fun.bu_id
и внутри этого фрагмента ipa
и aia
(пока) не существует, поэтому вы видите ошибки. Если эта часть была в порядке сама по себе, то она была бы присоединена к сбросу секции ANSI, но она не зашла так далеко, потому что она уже видела ошибки. (Я слишком упрощаю, и пытаюсь выяснить, что на самом деле делает парсер, это игра в догадки ... но в этом суть проблемы.)
Измените запятую, за которой следует iby_payments_all ibypa
, на перекрестное соединение:
...
INNER JOIN "gl_code_combinations" gcc
ON ida.dist_code_combination_id = gcc.code_combination_id,
iby_payments_all ibypa
INNER JOIN "ap_checks_all" aca
ON aca.check_id = ipa.check_id
AND aca.payment_id = ibypa.payment_id
INNER JOIN fun_all_business_units_v fun ON aia.org_id = fun.bu_id
* 1014 FO *
...
INNER JOIN "gl_code_combinations" gcc
ON ida.dist_code_combination_id = gcc.code_combination_id
CROSS JOIN iby_payments_all ibypa
INNER JOIN "ap_checks_all" aca
ON aca.check_id = ipa.check_id
AND aca.payment_id = ibypa.payment_id
INNER JOIN fun_all_business_units_v fun ON aia.org_id = fun.bu_id
что похоже на то, что вы делаете; хотя это тоже должно быть внутреннее соединение, если для этой таблицы тоже есть условия соединения, очевидно ...