当前位置: 首页 > 知识库问答 >
问题:

Oracle SQL查询无效标识符(ORA-00904)

金承嗣
2023-03-14

我正在进行SQL查询,但遇到了一个问题。

这就是查询。

SELECT Count(*) CNT
FROM   job_intern_manage T1
       LEFT JOIN job_intern_detail T2
              ON T1.jid_seq = T2.jid_seq
WHERE  T2.js_seq = '2'
       AND T1.del_yn = 'N'
       AND (SELECT Count(*)
            FROM   (SELECT prof_name
                    FROM   job_intern_report
                    WHERE  jim_seq = T1.jim_seq)
            WHERE  prof_name LIKE '%취업%') >= 1;

这就是结果。

ORA-00904: "T1"."JIM_SEQ": 부적합한 식별자
00904. 00000 -  "%s: invalid identifier"
*Cause:    
*Action:
27행, 38열에서 오류 발생

我不知道为什么“T1”在子查询中无效。

共有2个答案

严正初
2023-03-14

使用存在

SELECT Count(*) as CNT
FROM job_intern_manage jim JOIN
     job_intern_detail jid
     ON jim.jid_seq = jid.jid_seq
WHERE jid.js_seq = '2' AND
      jim.del_yn = 'N' AND
      EIXSTS (SELECT 1
              FROM job_intern_report jir
              WHERE jir.jim_seq = jim.jim_seq AND
                    jir.prof_name LIKE '%취업%'
             );

您的查询的问题是correlation子句嵌套了两层——而Oracle不允许这样。

但是,请注意其他修复:

  • WHERE子句将连接,转换为内部连接 。因此,没有理由指定左连接
  • 这些表被赋予有意义的表别名(缩写),而不是无意义的别名,如t1t2。这使得查询更易于编写和读取
  • 所有列都是限定的,因此很清楚它们引用的是什么表。对于相关子查询,尤其建议这样做
  • 存在比聚合更有效

越飞翮
2023-03-14

请尝试以下select语句:

SELECT Count(*) CNT
FROM   job_intern_manage T1
       LEFT JOIN job_intern_detail T2 ON T1.jid_seq = T2.jid_seq
WHERE  T2.js_seq = '2'
       AND T1.del_yn = 'N'
       AND (SELECT Count(*)
            FROM  job_intern_report
            WHERE jim_seq = T1.jim_seq
              AND prof_name LIKE '%취업%') >= 1;

您应该检查job_intern_manage表是否真的有一个名为jim_seq的列。

 类似资料:
  • 问题内容: 为什么下面的查询在oracle中不起作用? 产生“ ORA-00904:“ EO”。“ ENTITY_ID”:无效标识符”。但是,当我用精确值(例如10181)替换EO.ENTITY_ID时,它就可以工作。 更新:完整的查询如下所示: 问题答案: 如果您是基础知识的话,则 CORRELATED 可以访问相关表。但是,当有 INNER时 ,将首先尝试执行该表…因此,处于条件中的其他表将无

  • 问题内容: 我尝试使用Oracle数据库编写以下内部联接查询: 这给出了以下错误: 一个表的DDL为: 问题答案: 您的问题是那些有害的双引号。 Oracle SQL允许我们忽略数据库对象名称的大小写,只要我们创建它们时都使用大写的名称,或者不使用双引号即可。如果我们在脚本中使用大小写混合或小写并且将标识符括在双引号中,则当我们引用对象或其属性时,我们都被要求使用双引号和精确的大小写: tl; d

  • ORA-00904:“strdef”:无效标识符 > Oracle数据库版本为: Oracle Database 11g Enterprise Edition版本11.2.0.4.0-64位Production PL/SQL版本11.2.0.4.0-Production“Core 11.2.0.4.0 Production”TNS for Linux:版本11.2.0.4.0-Production

  • 我得到这个错误,而在Oracle数据库中执行查询: ORA-00904:“STRDEF”:无效标识符 > Oracle Database 11g Enterprise Edition 11.2.0.4.0版-64位生产PL/SQL 11.2.0.4.0版-生产“CORE 11.2.0.4.0生产”Linux版TNS:11.2.0.4.0版-生产NLSRTL 11.2.0.4.0版-生产 STRDE

  • 在PL/SQL中执行以下查询时,我得到ORA-00904:“\d$”:无效标识符错误。 我也尝试使用单引号,但仍然面临同样的错误。 有人能帮我解决这个问题吗

  • 问题内容: 1.在将row_val变量char值’Good’更新到表中时,得到无效的标识符错误2.在插入数字时,它工作正常,但字符串却出现错误3。 错误 ORA-00904:“良好”:标识符无效ORA-06512:在第43行ORA-06512:在“ SYS.DBMS_SQL”在第1721行 我想将此’good,son,r ,, happy’字符串中的每个单词插入一行中的单独列中 问题答案: 字符串