Oracle 10g Inner Join with Limit子句?

时间:2011-08-19 09:52:15

标签: sql oracle oracle10g inner-join limit

我觉得应该很容易,但我很难从内连接选择中返回最高结果。这是查询:

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 - “列模糊定义”

内部查询工作正常 - 撤回TIMESTAMP排序的约38条记录,我只想要最新的(前一条)

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

ATRIFACTS和ARTIFACT_METADATA必须有一个共同的(名义上的)列。

在内部查询本身中这是可以的,但是当外部查询为列分配名称时会发生冲突。

尝试专门命名内部查询列(将类似命名的列命名为不同的列),它应该可以正常工作。

更好的是,只选择内部查询中绝对需要的列而不是SELECT *

答案 1 :(得分:2)

您的内部查询返回两个名为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