Скорее всего, проблема во втором подзапросе select *
SELECT * FROM (
... subquery C ...
) C, EBILL_USER D WHERE ... AND C.ORIGINATOR = D.ORIGINATOR
Таблица D
содержит те же столбцы, что и подзапрос C
, наверняка, столбец ORIGINATOR
Просто измените второй запрос на SELECT C.*
и добавьте только обязательные столбцы из D
.
Общий подход , как устранить неполадки ORA-00918
, состоит в запуске запроса изсамый внутренний подзапрос и убедитесь, что возвращаемые имена столбцов уникальны.
В вашем случае попробуйте сначала, что должно быть хорошо
SELECT ROWNUM AS RNUM, A.XML_MSG_ID, A.LOGIN_ID, A.ORIGINATOR, A.RECIPIENT, A.ERROR_CODE, B.DOC_NO, B.DOC_NAME, B.ERROR_MSG
FROM XML_MANAGE_TBL A, XML_REFERENCE_TBL B
WHERE A.XML_MGS_ID = B.XML_MSG_ID
AND A.ERROR_CODE <> '00000000'
AND A.XML_MSG_ID >= '20190528' AND (SUBSTR(A.XML_MSG_ID, 1, 8)) <= '20190604'
Чем выполнить второй самый внутренний подзапрос
SELECT * FROM (
SELECT ROWNUM AS RNUM, A.XML_MSG_ID, A.LOGIN_ID, A.ORIGINATOR, A.RECIPIENT, A.ERROR_CODE, B.DOC_NO, B.DOC_NAME, B.ERROR_MSG
FROM XML_MANAGE_TBL A, XML_REFERENCE_TBL B
WHERE A.XML_MGS_ID = B.XML_MSG_ID
AND A.ERROR_CODE <> '00000000'
AND A.XML_MSG_ID >= '20190528' AND (SUBSTR(A.XML_MSG_ID, 1, 8)) <= '20190604' ) C, EBILL_USER D WHERE D.COMP_NUM = '1258169573' AND C.ORIGINATOR = D.ORIGINATOR
В вашей IDE (например, SQL Developer) вы увидите один и несколько столбцов с суффиксом _1
, который является признаком дублированного столбца, который должен быть исключен (для столбцов из предиката equijoin) или переименован.