我是Oracle的新手,并且使用相当大的数据库.我想执行一个查询,它将选择所需的列,按某列排序,并限制结果.根据我读过的所有内容,以下查询应该正常工作,但它返回"ORA-00918:列模糊定义":
SELECT * FROM(SELECT * FROM EAI.EAI_EVENT_LOG e,
EAI.EAI_EVENT_LOG_MESSAGE e1 WHERE e.SOURCE_URL LIKE '%.XML'
ORDER BY e.REQUEST_DATE_TIME DESC) WHERE ROWNUM <= 20
Run Code Online (Sandbox Code Playgroud)
任何建议将不胜感激:D
错误消息表示您的结果集包含两个具有相同名称的列.查询投影中的每一列都需要具有唯一名称.据推测,您在EAI_EVENT_LOG和EAI_EVENT_LOG_MESSAGE中都有一个同名的列(或列).
您还想加入该列.目前,您正在两个表之间生成交叉连接.换句话说,如果您在EAI_EVENT_LOG中有一百条记录和两百条记录EAI_EVENT_LOG_MESSAGE,那么您的结果集将是两万条记录(没有rownum).这可能是你的意图.
"通过切换到innerjoin,会消除当前代码的错误吗?"
不,你仍然需要处理两个具有相同名称的列.基本上这来自于使用SELECT *两个多个表. SELECT *是不好的做法.这很方便,但最好在查询的投影中指定所需的确切列.这样你就可以包括(说)e.TRANSACTION_ID和排除e1.TRANSACTION_ID,并避免ORA-00918异常.