sql - Oracle 10g 上的子查询问题

标签 sql oracle ora-00904

以下查询适用于 Windows 上的 Oracle 10.2.0.1.0,但不适用于 Linux 上的 Oracle 10.2.0.2.0。

错误报告: SQL 错误:ORA-00904:“T”。“AUDIT_USECS”:无效标识符 00904. 00000 - “%s:无效标识符”

它在我删除子查询后起作用。我发现如果在子查询中使用 T 的字段,则会发生错误。是说子查询不能访问主查询中的字段吗?

有什么问题?如何让它在 linux 上的 oracle 上运行? 谢谢!


CREATE TABLE AUDITHISTORY(
CASENUM numeric(20, 0) NOT NULL,
AUDIT_DATE date NOT NULL,
USER_NAME varchar(255) NULL,
AUDIT_USECS numeric(6, 0) NOT NULL,
TYPE_ID INT NOT NULL    )

查询:

SELECT T.CASENUM,
       T.USER_NAME,
       T.AUDIT_DATE AS STARTED,
       (SELECT * 
          FROM (SELECT S.AUDIT_DATE 
                  FROM AUDITHISTORY S 
                 WHERE S.CASENUM=T.CASENUM AND TYPE_ID=2
                   AND S.USER_NAME=T.USER_NAME 
                   AND (S.AUDIT_DATE > T.AUDIT_DATE OR (S.AUDIT_DATE = T.AUDIT_DATE AND S.AUDIT_USECS > T.AUDIT_USECS))
              ORDER BY S.AUDIT_DATE ASC,S.AUDIT_USECS ASC
       ) WHERE rownum <= 1) AS ENDED
FROM AUDITHISTORY T WHERE TYPE_ID=1

横幅

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production

横幅

Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - Prod PL/SQL Release 10.2.0.2.0 - Production
CORE 10.2.0.2.0 Production
TNS for Linux: Version 10.2.0.2.0 - Production
NLSRTL Version 10.2.0.2.0 - Production

最佳答案

我认为它在任何地方都有效令人惊讶。您在内联 View 中使用别名 T,但它仅在外部选择中定义。

在查看评论和其他答案中链接的所有信息后更新:

假设所有这些都是正确的,这个声明可能有效:

SELECT T.CASENUM,
   T.USER_NAME,
   T.AUDIT_DATE AS STARTED,
   (SELECT * 
      FROM (SELECT S.AUDIT_DATE 
              FROM AUDITHISTORY S 
             WHERE S.CASENUM=T.CASENUM AND TYPE_ID=2
               AND S.USER_NAME=T.USER_NAME 
          ORDER BY S.AUDIT_DATE ASC,S.AUDIT_USECS ASC
   ) R WHERE (S.AUDIT_DATE > T.AUDIT_DATE OR (S.AUDIT_DATE = T.AUDIT_DATE AND S.AUDIT_USECS > T.AUDIT_USECS))
   AND rownum <= 1) AS ENDED
FROM AUDITHISTORY T WHERE TYPE_ID=1

关于sql - Oracle 10g 上的子查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2430953/

相关文章:

oracle - 将 dmp 文件导入 Oracle 11g XE

sql - bool 给出无效数据类型 - Oracle

oracle - ROWID 作为 PL/SQL 中的参数

sql - 使用子查询而不是表名

sql - Select 语句和 If/else 语句

sql - 在 where 子句中使用计算字段

sql - 我怎样才能做一个不同的总和?

SQL查询: IN vs equal

sql - MySQL 查询和文本搜索

sql - 创建数据库范围的凭证语法