Sub Query Duvidosa

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
krecchi
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Qui, 18 Out 2007 7:55 am
Localização: São Paulo
KRecchi

Olá pessoal boa tarde!

Sou iniciante no oracle e estou com uma duvida.

Tenho uma query com uma subquery, quando rodo somente a subquery ela retorna os valores que eu preciso, mas quando executo a query relacionada a subquery (a validação) da subquery não funciona e os valores retornados não são os que eu quero que retorne, mostrando:

-- Mas se eu rodo o select todo, junto com a subquery, ele me retorna registros que eram para ser ignorados com a subquery --22823

Selecionar tudo

        SELECT EMPR_COD_CIF, 
                              OP_SDO_MEDIO.PROD_COD,
                              OP_VALOR_SM_CR,
                              OP_SALDO_DATA_CR,
                              OP_SALDO_DATA_US,
                              OP_VALOR_VCTO_CR,
                              OP_VALOR_VCTO_US
                         FROM OP_SDO_MEDIO, PROD
                        WHERE OP_PER_ANO = 2008
                          AND OP_PER_NUM = 2
               AND EXISTS
    --Quando eu executo este bloco, daqui pra baixo, retorna os valores que eu quero --20458 registros           
      (select * from op_sdo_medio o
      where o.op_tpint  = 'DR' and o.op_per_ano = 2008 and o.op_per_num = 2
      and exists (select '1' from op_sdo_medio a where a.op_tpint = 'SI'
                           and o.op_per_ano   = a.op_per_ano
                           and o.op_per_num   = a.op_per_num
                           and o.empr_cod_cif = a.empr_cod_cif
                           and o.op_valor_cr  = a.op_valor_cr
                           and o.op_valor_us  = a.op_valor_us
                           and o.op_dt_base   = a.op_dt_base
                           and o.op_dt_vcto   = a.op_dt_vcto
                           and o.op_pzo       = a.op_pzo
                           and o.gr_cod_cif   = a.gr_cod_cif)
      union
               
      select * from op_sdo_medio o
      where o.op_tpint  = 'DR' and o.op_per_ano = 2008 and o.op_per_num = 2
      and not exists (select '1' from op_sdo_medio a where a.op_tpint = 'SI'
                           and o.op_per_ano   = a.op_per_ano
                           and o.op_per_num   = a.op_per_num
                           and o.empr_cod_cif = a.empr_cod_cif
                           and o.op_valor_cr  = a.op_valor_cr
                           and o.op_valor_us  = a.op_valor_us
                           and o.op_dt_base   = a.op_dt_base
                           and o.op_dt_vcto   = a.op_dt_vcto
                           and o.op_pzo       = a.op_pzo
                           and o.gr_cod_cif   = a.gr_cod_cif)
      union
                
      select * from op_sdo_medio o
      where o.op_tpint  = 'SI'  and o.op_per_ano = 2008 and o.op_per_num = 2
      and not exists (select '1' from op_sdo_medio a where a.op_tpint = 'DR'
                           and o.op_per_ano   = a.op_per_ano
                           and o.op_per_num   = a.op_per_num
                           and o.empr_cod_cif = a.empr_cod_cif
                           and o.op_valor_cr  = a.op_valor_cr
                           and o.op_valor_us  = a.op_valor_us
                           and o.op_dt_base   = a.op_dt_base
                           and o.op_dt_vcto   = a.op_dt_vcto
                           and o.op_pzo       = a.op_pzo
                           and o.gr_cod_cif   = a.gr_cod_cif)
                           )

Será que eu consegui explicar? Se vocês puderem ajudar eu agradeço de coração.

valeu.

KRECCHI :wink:
rerodrig
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 27
Registrado em: Qua, 06 Fev 2008 10:33 am
Localização: Americana - SP

cara, o q realmente está retornando de errado nessa consulta???
parece q dos 3 select q estão dentro do primeiro exists, nos 2 primeiros você faz um exists e um not exists da mesma coisa, é isso ou estou enganado???
falow!!!
cron_rj
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 25
Registrado em: Qua, 19 Dez 2007 9:10 am
Localização: Rio de Janeiro RJ

Não sei se estou vendo corretamente, mas tenta trabalhar com apelidos na query principal para tentar um relacionamento entre a query e a sub-query. Ex:

Selecionar tudo

SELECT Q1.A, Q1 B
  FROM query Q1
 WHERE Q1.A = 2
   AND EXISTS (SELECT Q2.A FROM subquery Q2 WHERE Q2.A = Q1.A)
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 4 visitantes