Oracle 10g Inner Join с предложением Limit? - PullRequest
0 голосов
/ 19 августа 2011

Мне кажется, что должно быть легко, но я изо всех сил пытаюсь вернуть лучший результат из внутреннего выбора соединения.Это запрос:

SELECT * FROM (
    SELECT *
    FROM PROCESS_OWNER.ARTIFACTS, PROCESS_OWNER.ARTIFACT_METADATA
    WHERE ARTIFACTS.ARTIFACT_ID = ARTIFACT_METADATA.ARTIFACT_ID
    AND ARTIFACTS.ARTIFACT_LABEL = 'getDBStatus'
    ORDER BY ARTIFACTS.REGISTERED_TIMESTAMP DESC 
)
WHERE ROWNUM = 1

База данных Oracle 10g.Я получаю ошибку: 00918. 00000 - «столбец неоднозначно определен»

Внутренний запрос работает нормально - получает около 38 записей, упорядоченных TIMESTAMP, я просто хочу самую последнюю (верхнюю)

Спасибо за любую помощь

Ответы [ 2 ]

2 голосов
/ 19 августа 2011

Ваш внутренний запрос возвращает два столбца с именем ARTIFACT_ID - по одному из каждой таблицы.Когда вы вкладываете это в другой выбор, это приводит к ошибке, которую вы видите.Вам нужно однозначно перечислить нужные столбцы во внутреннем выделении.

Как ни странно, если вы переписываете его с помощью соединения ANSI, это работает:

SELECT * FROM (
    SELECT *
    FROM PROCESS_OWNER.ARTIFACTS
    JOIN PROCESS_OWNER.ARTIFACT_METADATA
    ON ARTIFACTS.ARTIFACT_ID = ARTIFACT_METADATA.ARTIFACT_ID
    WHERE ARTIFACTS.ARTIFACT_LABEL = 'getDBStatus'
    ORDER BY ARTIFACTS.REGISTERED_TIMESTAMP DESC 
)
WHERE ROWNUM = 1
2 голосов
/ 19 августа 2011

Должен быть столбец, который является общим (по названию) как для ATRIFACTS, так и для ARTIFACT_METADATA.

Это нормально в самом внутреннем запросе, но когда внешний запрос назначает имена столбцам, возникает конфликт.

Попробуйте дать конкретное имя внутренним столбцам запроса (называя столбцы с одинаковыми именами как-то по-разному), и все должно работать нормально.

Еще лучше: выберите только те столбцы, которые вам абсолютно необходимы во внутреннем запросе, а не SELECT *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...