2

ORACLE: ORA-00904: Invalid Identifier on: というエラーが表示されます。

and l.cd_pergunta = e.cd_pergunta

無効な識別子は 'e'、cd_pergunta のプレフィックスです...

このクエリを実行すると:

select count(*)
  from TEACEITE e
 inner join TEREGETA re on re.cd_etapa = e.cd_etapa
                       and re.id_reg_neg = 1.00000000
 where e.obrigatorio = 1
   and not exists
 (select 1
          from GESESSAO s
         inner join GERESPOS r on r.sessao = s.sessao_resp
                              and r.resposta_log = 1
         inner join GEEPE l on l.cd_quest = s.cd_quest
                           and l.ord_perg = r.ord_pergunta
                           and l.cd_pergunta = e.cd_pergunta
         where s.cd_quest = e.cd_quest
           and s.item = e.cd_etapa
           and s.origem = 'GC'
           and s.os_nf_orc_cont = 1.00000000)

何か案が?

4

2 に答える 2

6

問題は、ネストされた選択内でエイリアス e を使用できないため、「無効な識別子」になることです。s.cd_quest = e.cd_quest and s.item = e.cd_etapa条件がネストされた選択ではなくメインの選択の一部になるように、クエリを書き直すことができます。

編集:いくつかのシナリオを試しましたが、問題は、ネストされたクエリでの結合解決中にエイリアス e を使用できないことです。内部クエリの結合条件で外部テーブルのエイリアスを参照できないようです。

私は次のことがうまくいくと信じています

  select count(*)
  from TEACEITE e
 inner join TEREGETA re on re.cd_etapa = e.cd_etapa
                       and re.id_reg_neg = 1.00000000
 where e.obrigatorio = 1
   and not exists
 (select 1
          from GESESSAO s
         inner join GERESPOS r on r.sessao = s.sessao_resp
                              and r.resposta_log = 1
         inner join GEEPE l on l.cd_quest = s.cd_quest
                           and l.ord_perg = r.ord_pergunta
         where l.cd_pergunta = e.cd_pergunta
           and s.cd_quest = e.cd_quest
           and s.item = e.cd_etapa
           and s.origem = 'GC'
           and s.os_nf_orc_cont = 1.00000000)

このクエリは機能する可能性がありますが、希望どおりに機能するかどうかはわかりません。ビジネス ロジックも同様に処理されていることを確認してください。

于 2012-05-08T14:08:43.383 に答える
0

Raam が言ったように、サブクエリの結合内でエイリアス e を使用することはできません。
結合に sql1999 構文を使用しないようにすることもできます。

select count(*)
  from TEACEITE e
 inner join TEREGETA re on re.cd_etapa = e.cd_etapa
                       and re.id_reg_neg = 1.00000000
 where e.obrigatorio = 1
   and not exists
 (select 1
    from GESESSAO s, GERESPOS r , GEEPE l 
   where r.sessao = s.sessao_resp
     and r.resposta_log = 1
     and l.cd_quest = s.cd_quest
     and l.ord_perg = r.ord_pergunta
     and l.cd_pergunta = e.cd_pergunta
     and s.cd_quest = e.cd_quest
     and s.item = e.cd_etapa
     and s.origem = 'GC'
     and s.os_nf_orc_cont = 1.00000000)
于 2012-05-09T04:36:37.970 に答える