我觉得这应该很容易,但我正在努力从内部的连接选择返回最高的结果。这是一个查询:
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条记录,我只想要最近的(前一条)。
谢谢你的帮助
发布于 2011-08-19 09:59:38
内部查询返回两个名为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发布于 2011-08-19 09:58:15
必须有一个对ATRIFACTS和ARTIFACT_METADATA都是通用的列(在名称上)。
这在内部查询本身中是可以的,但是当外部查询为列指定名称时,就会发生冲突。
尝试具体地命名内部查询列(将类似名称的列命名为不同的列),它应该可以正常工作。
更好的是,只选择您在内部查询中绝对需要的列,而不是选择*
https://stackoverflow.com/questions/7119862
复制相似问题