我正在尝试执行以下sql查询
select *
from TURMAS t
where exists (select *
from (
select count(*) Alunos
from HISTORICOS h1
where h1.ANO = t.ANO
and h1.SEMESTRE = t.SEMESTRE
and h1.COD_DISC = t.COD_DISC
) a ,
(
select count(*) Reprovados
from HISTORICOS h2
where h2.SITUACAO <> 'AP'
and h2.ANO = t.ANO
and h2.SEMESTRE = t.SEMESTRE
and h2.COD_DISC = t.COD_DISC
) r
where ((r.REPROVADOS * 100) / a.ALUNOS) >= 60
);
但是每当我尝试执行它时,我得到(00904. 00000 - “%s:无效标识符”)第24行(或任何其他行我尝试使用TURMAS的别名,即使我尝试使用TURMAS没有别名。
我在查询中找不到错误。
这是描述TURMAS
SQL> describe turmas
Nome Nulo? Tipo
----------------------------------------- -------- -------------------------
ANO NOT NULL NUMBER(4)
SEMESTRE NOT NULL NUMBER(1)
COD_DISC NOT NULL NUMBER(6)
VAGAS NOT NULL NUMBER(3)
IDT_PROF NUMBER(6)
SQL描述HISTORICOS
SQL> describe historicos
Nome Nulo? Tipo
----------------------------------------- -------- -------------------------
ANO NOT NULL NUMBER(4)
SEMESTRE NOT NULL NUMBER(1)
MAT_ALU NOT NULL NUMBER(10)
COD_DISC NOT NULL NUMBER(6)
SITUACAO NOT NULL CHAR(2)
MEDIA NOT NULL NUMBER(3,1)
FALTAS NOT NULL NUMBER(3)
和来自V $ VERSION的select *
SQL> SELECT * FROM V$VERSION;
BANNER
-----------------------------------------------------------------------------
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production
CORE 11.2.0.2.0 Production
TNS for Linux: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production
我在Oracle SQL Developer和Dbeaver上都遇到了同样的错误,当我尝试使用相同的东西但是使用t。****一个常量时,它可以工作。
答案 0 :(得分:0)
感谢xQbert链接,它起作用了。我甚至没有想过深度?丑陋,性能不佳的问题,但它现在有效,因为它必须在2小时内交付,而且对于大学而言不是工作查询,它会做。
select *
from TURMAS t
where (
select count(*) Alunos
from HISTORICOS h1
where h1.ANO = t.ANO
and h1.SEMESTRE = t.SEMESTRE
and h1.COD_DISC = t.COD_DISC
) > 0
and(
select count(*) * 0.6 Alunos
from HISTORICOS h1
where h1.ANO = t.ANO
and h1.SEMESTRE = t.SEMESTRE
and h1.COD_DISC = t.COD_DISC
) <= (
select count(*) Reprovados
from HISTORICOS h2
where h2.SITUACAO <> 'AP'
and h2.ANO = t.ANO
and h2.SEMESTRE = t.SEMESTRE
xQbert
我没想到你可以在1个以上的嵌套表中嵌套引用 水平深。 askTom的文章Salient line:我们说... ANSI SQL有 表引用(相关名称)范围只限于一个深度