我觉得应该很容易,但我很难从内连接选择中返回最高结果。这是查询:
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条记录,我只想要最新的(前一条)
感谢您的帮助
答案 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