none
Ajuda Query - Urgente RRS feed

  • Pergunta

  •  

    Amigos estou fazendo uma união de uma query com uma outra subquery, porém quando consulto a quantidade de registros para essa operação aparece um valor maoir de 170 milhões de registros. Como isso é possível visto que nas duas tabelas consultas não possui mais de 9 milhões de registros?

     

    Ah uma outra pergunta como faço um join no Oracle? Quando tento jogar a mesma sintaxe do SQLSERVER não funciona.

     

    Segue a consulta que utilizo.

    SELECT COUNT(*) FROM (Select ILA.INVOICE_ACCOUNT_ID CONTARBOR, ITSI.INVOICE_ACCOUNT_ID,
         ITSI.SERV_INST_NUMBER,
         ITSI.SERV_INST_STATUS_ID,
         Max(ITSI.SERV_INST_STATUS_DATE) SERV_INST_STATUS_DATE,
         Max(ITSI.SERV_INST_RATEPLAN) SERV_INST_RATEPLAN
     from ICS_T_SERV_INST ITSI,
       ICS_L_ACCOUNT ILA
    where ITSI.INVOICE_ACCOUNT_ID = ILA.INVOICE_ACCOUNT_EXTERNAL_ID
        and ITSI.SERV_INST_STATUS_ID = 'Ativado'
        --and ITSI.INVOICE_ACCOUNT_ID = 2743261813
    group by ILA.INVOICE_ACCOUNT_ID, ITSI.INVOICE_ACCOUNT_ID, ITSI.SERV_INST_NUMBER, ITSI.SERV_INST_STATUS_ID

     UNION ALL
     
     Select SubQ2.CONTARBOR,
         SubQ2.INVOICE_ACCOUNT_ID,
         SubQ2.SERV_INST_NUMBER,
         SubQ2.SERV_INST_STATUS_ID,
         SubQ2.SERV_INST_STATUS_DATE,
         SubQ2.SERV_INST_RATEPLAN
     from
      
      (Select ILA.INVOICE_ACCOUNT_ID CONTARBOR, ITSI.INVOICE_ACCOUNT_ID,
          ITSI.SERV_INST_NUMBER,
          ITSI.SERV_INST_STATUS_ID,
          Max(ITSI.SERV_INST_STATUS_DATE) SERV_INST_STATUS_DATE,
          Max(ITSI.SERV_INST_RATEPLAN) SERV_INST_RATEPLAN
      From ICS_T_SERV_INST ITSI,
        ICS_L_ACCOUNT ILA
      Where ITSI.INVOICE_ACCOUNT_ID = ILA.INVOICE_ACCOUNT_EXTERNAL_ID
         and ITSI.SERV_INST_STATUS_ID = 'Ativado'
         --and ITSI.INVOICE_ACCOUNT_ID = 2743261813
      Group By ILA.INVOICE_ACCOUNT_ID, ITSI.INVOICE_ACCOUNT_ID, ITSI.SERV_INST_NUMBER, ITSI.SERV_INST_STATUS_ID) SubQ1,
      
      
       (Select ILA.INVOICE_ACCOUNT_ID CONTARBOR, ITSI.INVOICE_ACCOUNT_ID,
          ITSI.SERV_INST_NUMBER,
          ITSI.SERV_INST_STATUS_ID,
          Max(ITSI.SERV_INST_STATUS_DATE) SERV_INST_STATUS_DATE,
          Max(ITSI.SERV_INST_RATEPLAN) SERV_INST_RATEPLAN
      from ICS_T_SERV_INST ITSI,
        ICS_L_ACCOUNT ILA
      where ITSI.INVOICE_ACCOUNT_ID = ILA.INVOICE_ACCOUNT_EXTERNAL_ID
         and ITSI.SERV_INST_STATUS_ID = 'Desativado'
         --and ITSI.INVOICE_ACCOUNT_ID = 2743261813
      group by ILA.INVOICE_ACCOUNT_ID, ITSI.INVOICE_ACCOUNT_ID, ITSI.SERV_INST_NUMBER, ITSI.SERV_INST_STATUS_ID ) SubQ2
      
     Where SubQ1.INVOICE_ACCOUNT_ID = SubQ2.INVOICE_ACCOUNT_ID
        and SubQ1.SERV_INST_NUMBER <> SubQ2.SERV_INST_NUMBER
       
     Group by SubQ2.CONTARBOR,
        SubQ2.INVOICE_ACCOUNT_ID,
        SubQ2.SERV_INST_NUMBER,
        SubQ2.SERV_INST_STATUS_ID,
        SubQ2.SERV_INST_STATUS_DATE,
        SubQ2.SERV_INST_RATEPLAN)

    quarta-feira, 5 de março de 2008 18:03

Respostas

  • dralves, no seu caso você está utilizando o operador UNION ALL, neste caso ele insere todas as linhas da união que você fez inclusive as duplicadas, tente alterar para o operador UNION, porém certamente o custo da sua query vai subir, muito cuidado faça em ambiente de teste antes, ok?

     

    Espero ter ajudado.

     

    Abraços,

    quarta-feira, 5 de março de 2008 21:15