首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle10g内连接限制子句?

Oracle10g内连接限制子句?
EN

Stack Overflow用户
提问于 2011-08-19 09:52:15
回答 2查看 2K关注 0票数 0

我觉得这应该很容易,但我正在努力从内部的连接选择返回最高的结果。这是一个查询:

代码语言:javascript
复制
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条记录,我只想要最近的(前一条)。

谢谢你的帮助

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-19 09:59:38

内部查询返回两个名为ARTIFACT_ID的列--每个表中有一个列。当您在另一个选择中嵌套时,它会导致所看到的错误。您需要在内部选择中明确列出您想要的列。

奇怪的是,如果您用ANSI连接重写它,它会工作:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2011-08-19 09:58:15

必须有一个对ATRIFACTS和ARTIFACT_METADATA都是通用的列(在名称上)。

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

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7119862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档