Firebird SQL and Union ALL without duplicating items

Asked

Viewed 667 times

9

I have an appointment SQL searching in two table one leading and one of historical only when I run the query the values come duplicated I use UNION All because if I put the UNION or DISTINCT displays the following message:

Unsuccessful Execution caused by an unavailable Resource. Sort record size of 104518 bytes is Too big.

treduzindo:

Unsuccessful execution caused by an unavailable resource. The size of the Incorrect record of 104518 bytes is very large.

how can I fix this?

SELECT 
  TABNOV.NUMERO_PROCESSO,
  TABNOV.NUMERO_PROCESSO_ORI,
  TABNOV.DATA_DISTRIBUICAO,
  TABNOV.DATA_ESCRITORIO,
  TABNOV.STATUS,
  CLIENTES.NOME_CLIENTE,
  UNIDADES_ESCRITORIOS.NOME_UNIDADE,
  TABNOV.CLIENTE_ADICIONAIS,
  TABNOV.PARTE_CONTRARIA,
  TABNOV.PARTE_CONTRARIA_ADICIONAIS,
  TABNOV.TITULO_DESCRICAO,
  TABNOV.OBJETO,
  TABNOV.CAMPO_GENERICO,
  TABNOV.ADVOGADO_DILIGENTE,
  TABNOV.ADVOGADO_PARTE_CONTRARIA,
  CLIENTES.NOME_REDE_GRUPO,
  TABNOV.LOCALIZACAO_PASTA_ARQUIVO,
  TABNOV.CLIENTE_AUTOR_OU_REU,
  TABNOV.FASE_PROCESSO,
  TABNOV.FASE_ANTERIOR,
  TABNOV.VALOR_CAUSA,
  TABNOV.OBSERVACAO,
  TABNOV.GARANTIA_REAL,
  TABNOV.NUMERO_CONTRATO,
  TABNOV.INSTANCIA,
  TABNOV.COMARCA,
  TABNOV.ORGAO,
  TABNOV.NUMERO_E_VARA,
  TABNOV.TIPO_ACAO,
  TABNOV.ULTIMA_ALTERACAO,
  TABNOV.CODIGO_ANDAMENTO,
  TABNOV.DATA,
  TABNOV.HORA,
  TABNOV.DESCRICAO_ANDAMENTO,
  TABNOV.ATO_FATURAVEL,
  TABNOV.OBSERV_ANDAM
FROM
  CLIENTES,
  (SELECT
     T1.NUMERO_PROCESSO,
     T1.NUMERO_PROCESSO AS NUMERO_PROCESSO_ORI,
     T1.DATA_ESCRITORIO,
     T1.DATA_DISTRIBUICAO,
     T1.STATUS,
     T1.COD_CLIENTE,
     T1.COD_UNIDADE,
     T1.CLIENTE_ADICIONAIS,
     T1.PARTE_CONTRARIA,
     T1.PARTE_CONTRARIA_ADICIONAIS,
     T1.TITULO_DESCRICAO,
     T1.OBJETO,
     T1.CAMPO_GENERICO,
     T1.ADVOGADO_DILIGENTE,
     T1.ADVOGADO_PARTE_CONTRARIA,
     T1.FASE_PROCESSO      AS FASE_PROCESSO,
     T1.FASE_ANTERIOR,
     T1.CLIENTE_AUTOR_OU_REU,
     T1.COMARCA1         AS COMARCA,
     T1.ORGAO1           AS ORGAO,
     T1.TIPO_ACAO1       AS TIPO_ACAO,
     T1.NUMERO_E_VARA1   AS NUMERO_E_VARA,
     T1.INSTANCIA1       AS INSTANCIA,
     T1.ULTIMA_ALTERACAO AS ULTIMA_ALTERACAO,
     T1.LOCALIZACAO_PASTA_ARQUIVO,
     T1.VALOR_CAUSA,
     T1.GARANTIA_REAL,
     T1.NUMERO_CONTRATO,
     T1.OBSERVACAO,
     T3.CODIGO_ANDAMENTO,
     T3.DATA,
     T3.HORA,
     T3.ATO_FATURAVEL,
     T3.DESCRICAO_ANDAMENTO,
     T3.OBSERVACAO AS OBSERV_ANDAM
   FROM
     PROCESSOS T1 left join ANDAMENTOS_PROCESSUAIS T3 on T3.CODIGO_ANDAMENTO =
     (select max(TS1.CODIGO_ANDAMENTO)
      from ANDAMENTOS_PROCESSUAIS TS1
      where TS1.NUMERO_PROCESSO = T1.NUMERO_PROCESSO)
   UNION ALL
   SELECT
     T1.NUMERO_PROCESSO,
     T1.NUMERO_PROCESSO   AS NUMERO_PROCESSO_ORI,
     T1.DATA_ESCRITORIO,
     T1.DATA_DISTRIBUICAO,
     T1.STATUS,
     T1.COD_CLIENTE,
     T1.COD_UNIDADE,
     T1.CLIENTE_ADICIONAIS,
     T1.PARTE_CONTRARIA,
     T1.PARTE_CONTRARIA_ADICIONAIS,
     T1.TITULO_DESCRICAO,
     T1.OBJETO,
     T1.CAMPO_GENERICO,
     T1.ADVOGADO_DILIGENTE,
     T1.ADVOGADO_PARTE_CONTRARIA,
     T1.FASE_PROCESSO     AS FASE_PROCESSO,
     T1.FASE_ANTERIOR,
     T1.CLIENTE_AUTOR_OU_REU,
     T1.COMARCA1          AS COMARCA,
     T1.ORGAO1            AS ORGAO,
     T1.TIPO_ACAO1        AS TIPO_ACAO,
     T1.NUMERO_E_VARA1    AS NUMERO_E_VARA,
     T1.INSTANCIA1        AS INSTANCIA,
     T1.ULTIMA_ALTERACAO  AS ULTIMA_ALTERACAO,
     T1.LOCALIZACAO_PASTA_ARQUIVO,
     T1.VALOR_CAUSA,
     T1.GARANTIA_REAL,
     T1.NUMERO_CONTRATO,
     T1.OBSERVACAO,
     T4.CODIGO_ANDAMENTO,
     T4.DATA,
     T4.HORA,
     T4.ATO_FATURAVEL,
     T4.DESCRICAO_ANDAMENTO,
     T4.OBSERVACAO AS OBSERV_ANDAM
   FROM
     PROCESSOS T1 left join ANDAMENTOS_HISTORICO T4 on T4.CODIGO_ANDAMENTO =
     (select max(TS1.CODIGO_ANDAMENTO) from ANDAMENTOS_HISTORICO TS1, PROCESSOS P1
      where (TS1.NUMERO_PROCESSO_AUX = P1.NUMERO_PROCESSO) and
            (P1.NUMERO_PROCESSO      = T1.NUMERO_PROCESSO))
  ) TABNOV LEFT JOIN UNIDADES_ESCRITORIOS ON TABNOV.COD_UNIDADE = UNIDADES_ESCRITORIOS.COD_UNIDADE 
WHERE
  (TABNOV.COD_CLIENTE = CLIENTES.COD_CLIENTE)             and
   (TABNOV.FASE_PROCESSO not Like '%ARQUIVADO%')          and
  ((TABNOV.FASE_PROCESSO not Like '%ARQUIVADO%') or
   (TABNOV.FASE_PROCESSO is null)                or
   (TABNOV.STATUS <> 'ARQUIVADO'))                        and
   (TABNOV.STATUS <> 'ARQUIVADO')                         and
   (TABNOV.ADVOGADO_DILIGENTE like "%MONICA%")            and
   (TABNOV.GARANTIA_REAL = 'S')
  • Have you ever tried to do with GROUP BY?

  • 1

    Group By’s no good 'cause it was getting slow

  • 1

    puts structure and which query is using please

  • 2

    If the GROUP BY is slow and this message related to memory appears, you are using some column with very large text, right?

  • 1

    Sure what I have to do?

  • you can make one distinct, however I think the time will be similar to that of group by.. &#xA;&#xA;&#xA;SELECT DISTINCT &#xA; TABNOV.NUMERO_PROCESSO,&#xA; TABNOV.NUMERO_PROCESSO_ORI,&#xA; TABNOV.DATA_DISTRIBUICAO,&#xA; TABNOV.DATA_ESCRITORIO,&#xA;/* Continue */

  • I already tried will not... appears the Mag Unsuccessful Execution caused by an unavailable Resource. Sort record size of 104518 bytes is Too big.

Show 2 more comments

1 answer

3


Instead of using the sub-querys as you are doing here for example:

    SELECT 
      TABNOV.NUMERO_PROCESSO,
      TABNOV.NUMERO_PROCESSO_ORI,
      TABNOV.DATA_DISTRIBUICAO,
      TABNOV.DATA_ESCRITORIO,
      TABNOV.STATUS,
      CLIENTES.NOME_CLIENTE,
      UNIDADES_ESCRITORIOS.NOME_UNIDADE,
      TABNOV.CLIENTE_ADICIONAIS,
      TABNOV.PARTE_CONTRARIA,
      TABNOV.PARTE_CONTRARIA_ADICIONAIS,
      TABNOV.TITULO_DESCRICAO,
      TABNOV.OBJETO,
      TABNOV.CAMPO_GENERICO,
      TABNOV.ADVOGADO_DILIGENTE,
      TABNOV.ADVOGADO_PARTE_CONTRARIA,
      CLIENTES.NOME_REDE_GRUPO,
      TABNOV.LOCALIZACAO_PASTA_ARQUIVO,
      TABNOV.CLIENTE_AUTOR_OU_REU,
      TABNOV.FASE_PROCESSO,
      TABNOV.FASE_ANTERIOR,
      TABNOV.VALOR_CAUSA,
      TABNOV.OBSERVACAO,
      TABNOV.GARANTIA_REAL,
      TABNOV.NUMERO_CONTRATO,
      TABNOV.INSTANCIA,
      TABNOV.COMARCA,
      TABNOV.ORGAO,
      TABNOV.NUMERO_E_VARA,
      TABNOV.TIPO_ACAO,
      TABNOV.ULTIMA_ALTERACAO,
      TABNOV.CODIGO_ANDAMENTO,
      TABNOV.DATA,
      TABNOV.HORA,
      TABNOV.DESCRICAO_ANDAMENTO,
      TABNOV.ATO_FATURAVEL,
      TABNOV.OBSERV_ANDAM
    FROM
      CLIENTES,
Subquery ->      (SELECT
                  T1.NUMERO_PROCESSO,
                  T1.NUMERO_PROCESSO AS NUMERO_PROCESSO_ORI,
                  T1.DATA_ESCRITORIO,
                  T1.DATA_DISTRIBUICAO,
                  T1.STATUS,
                  T1.COD_CLIENTE,
                  T1.COD_UNIDADE[...]

Try to use the WITH

 WITH TABELA_TAL
   AS (SELECT
      T1.NUMERO_PROCESSO,
      T1.NUMERO_PROCESSO AS NUMERO_PROCESSO_ORI,
      T1.DATA_ESCRITORIO,
      T1.DATA_DISTRIBUICAO,
      T1.STATUS,
      T1.COD_CLIENTE,
      T1.COD_UNIDADE[...])
 SELECT 
   TABNOV.NUMERO_PROCESSO,
   TABNOV.NUMERO_PROCESSO_ORI,
   TABNOV.DATA_DISTRIBUICAO,
   TABNOV.DATA_ESCRITORIO,
   TABNOV.STATUS,
   CLIENTES.NOME_CLIENTE,
   UNIDADES_ESCRITORIOS.NOME_UNIDADE,
   TABNOV.CLIENTE_ADICIONAIS,
   TABNOV.PARTE_CONTRARIA,
   TABNOV.PARTE_CONTRARIA_ADICIONAIS,
   TABNOV.TITULO_DESCRICAO,
   TABNOV.OBJETO,
   TABNOV.CAMPO_GENERICO,
   TABNOV.ADVOGADO_DILIGENTE,
   TABNOV.ADVOGADO_PARTE_CONTRARIA,
   CLIENTES.NOME_REDE_GRUPO,
   TABNOV.LOCALIZACAO_PASTA_ARQUIVO,
   TABNOV.CLIENTE_AUTOR_OU_REU,
   TABNOV.FASE_PROCESSO,
   TABNOV.FASE_ANTERIOR,
   TABNOV.VALOR_CAUSA,
   TABNOV.OBSERVACAO,
   TABNOV.GARANTIA_REAL,
   TABNOV.NUMERO_CONTRATO,
   TABNOV.INSTANCIA,
   TABNOV.COMARCA,
   TABNOV.ORGAO,
   TABNOV.NUMERO_E_VARA,
   TABNOV.TIPO_ACAO,
   TABNOV.ULTIMA_ALTERACAO,
   TABNOV.CODIGO_ANDAMENTO,
   TABNOV.DATA,
   TABNOV.HORA,
   TABNOV.DESCRICAO_ANDAMENTO,
   TABNOV.ATO_FATURAVEL,
   TABNOV.OBSERV_ANDAM
 FROM CLIENTES
INNER JOIN TABELA_TAL ON 1 = 1 {Poem sua ligação de preferência aqui}

You can create multiple tables with WITH and then use them, from a search on.

Edited

I set an example as requested, please do not copy and paste just... Check how I did and change according to your needs, there may be a little thing or other wrong in the middle.

From a researcher on the WITH also to understand better

WITH TABELA_1
  AS (SELECT MAX(TS1.CODIGO_ANDAMENTO) AS CODIGO_ANDAMENTO
        FROM ANDAMENTOS_PROCESSUAIS TS1
       WHERE TS1.NUMERO_PROCESSO = T1.NUMERO_PROCESSO),
  TABELA_2 
  AS (SELECT MAX(TS1.CODIGO_ANDAMENTO) AS CODIGO_ANDAMENTO
        FROM ANDAMENTOS_HISTORICO TS1, PROCESSOS P1
       WHERE TS1.NUMERO_PROCESSO_AUX = P1.NUMERO_PROCESSO 
         AND P1.NUMERO_PROCESSO      = T1.NUMERO_PROCESSO),
  TABNOV
  AS (SELECT T1.NUMERO_PROCESSO,
             T1.NUMERO_PROCESSO AS NUMERO_PROCESSO_ORI,
             T1.DATA_ESCRITORIO,
             T1.DATA_DISTRIBUICAO,
             T1.STATUS,
             T1.COD_CLIENTE,
             T1.COD_UNIDADE,
             T1.CLIENTE_ADICIONAIS,
             T1.PARTE_CONTRARIA,
             T1.PARTE_CONTRARIA_ADICIONAIS,
             T1.TITULO_DESCRICAO,
             T1.OBJETO,
             T1.CAMPO_GENERICO,
             T1.ADVOGADO_DILIGENTE,
             T1.ADVOGADO_PARTE_CONTRARIA,
             T1.FASE_PROCESSO      AS FASE_PROCESSO,
             T1.FASE_ANTERIOR,
             T1.CLIENTE_AUTOR_OU_REU,
             T1.COMARCA1         AS COMARCA,
             T1.ORGAO1           AS ORGAO,
             T1.TIPO_ACAO1       AS TIPO_ACAO,
             T1.NUMERO_E_VARA1   AS NUMERO_E_VARA,
             T1.INSTANCIA1       AS INSTANCIA,
             T1.ULTIMA_ALTERACAO AS ULTIMA_ALTERACAO,
             T1.LOCALIZACAO_PASTA_ARQUIVO,
             T1.VALOR_CAUSA,
             T1.GARANTIA_REAL,
             T1.NUMERO_CONTRATO,
             T1.OBSERVACAO,
             T3.CODIGO_ANDAMENTO,
             T3.DATA,
             T3.HORA,
             T3.ATO_FATURAVEL,
             T3.DESCRICAO_ANDAMENTO,
             T3.OBSERVACAO AS OBSERV_ANDAM
         FROM      PROCESSOS T1 
         LEFT JOIN TABELA_1  TAB1 ON 1 = 1
         LEFT JOIN ANDAMENTOS_PROCESSUAIS T3 ON T3.CODIGO_ANDAMENTO = TAB1.CODIGO_ANDAMENTO
      UNION ALL
      SELECT T1.NUMERO_PROCESSO,
             T1.NUMERO_PROCESSO   AS NUMERO_PROCESSO_ORI,
             T1.DATA_ESCRITORIO,
             T1.DATA_DISTRIBUICAO,
             T1.STATUS,
             T1.COD_CLIENTE,
             T1.COD_UNIDADE,
             T1.CLIENTE_ADICIONAIS,
             T1.PARTE_CONTRARIA,
             T1.PARTE_CONTRARIA_ADICIONAIS,
             T1.TITULO_DESCRICAO,
             T1.OBJETO,
             T1.CAMPO_GENERICO,
             T1.ADVOGADO_DILIGENTE,
             T1.ADVOGADO_PARTE_CONTRARIA,
             T1.FASE_PROCESSO     AS FASE_PROCESSO,
             T1.FASE_ANTERIOR,
             T1.CLIENTE_AUTOR_OU_REU,
             T1.COMARCA1          AS COMARCA,
             T1.ORGAO1            AS ORGAO,
             T1.TIPO_ACAO1        AS TIPO_ACAO,
             T1.NUMERO_E_VARA1    AS NUMERO_E_VARA,
             T1.INSTANCIA1        AS INSTANCIA,
             T1.ULTIMA_ALTERACAO  AS ULTIMA_ALTERACAO,
             T1.LOCALIZACAO_PASTA_ARQUIVO,
             T1.VALOR_CAUSA,
             T1.GARANTIA_REAL,
             T1.NUMERO_CONTRATO,
             T1.OBSERVACAO,
             T4.CODIGO_ANDAMENTO,
             T4.DATA,
             T4.HORA,
             T4.ATO_FATURAVEL,
             T4.DESCRICAO_ANDAMENTO,
             T4.OBSERVACAO AS OBSERV_ANDAM
         FROM      PROCESSOS T1 
         LEFT JOIN TABELA_2  TAB2 ON 1 = 1
         LEFT JOIN ANDAMENTOS_HISTORICO T4 ON T4.CODIGO_ANDAMENTO = TAB2.CODIGO_ANDAMENTO)     
SELECT TABNOV.NUMERO_PROCESSO,
       TABNOV.NUMERO_PROCESSO_ORI,
       TABNOV.DATA_DISTRIBUICAO,
       TABNOV.DATA_ESCRITORIO,
       TABNOV.STATUS,
       CLIENTES.NOME_CLIENTE,
       UNIDADES_ESCRITORIOS.NOME_UNIDADE,
       TABNOV.CLIENTE_ADICIONAIS,
       TABNOV.PARTE_CONTRARIA,
       TABNOV.PARTE_CONTRARIA_ADICIONAIS,
       TABNOV.TITULO_DESCRICAO,
       TABNOV.OBJETO,
       TABNOV.CAMPO_GENERICO,
       TABNOV.ADVOGADO_DILIGENTE,
       TABNOV.ADVOGADO_PARTE_CONTRARIA,
       CLIENTES.NOME_REDE_GRUPO,
       TABNOV.LOCALIZACAO_PASTA_ARQUIVO,
       TABNOV.CLIENTE_AUTOR_OU_REU,
       TABNOV.FASE_PROCESSO,
       TABNOV.FASE_ANTERIOR,
       TABNOV.VALOR_CAUSA,
       TABNOV.OBSERVACAO,
       TABNOV.GARANTIA_REAL,
       TABNOV.NUMERO_CONTRATO,
       TABNOV.INSTANCIA,
       TABNOV.COMARCA,
       TABNOV.ORGAO,
       TABNOV.NUMERO_E_VARA,
       TABNOV.TIPO_ACAO,
       TABNOV.ULTIMA_ALTERACAO,
       TABNOV.CODIGO_ANDAMENTO,
       TABNOV.DATA,
       TABNOV.HORA,
       TABNOV.DESCRICAO_ANDAMENTO,
       TABNOV.ATO_FATURAVEL,
       TABNOV.OBSERV_ANDAM
   FROM      CLIENTES
  INNER JOIN TABNOV              ON TABNOV.COD_CLIENTE = CLIENTES.COD_CLIENTE  
  LEFT JOIN UNIDADES_ESCRITORIOS ON TABNOV.COD_UNIDADE = UNIDADES_ESCRITORIOS.COD_UNIDADE 
  WHERE TABNOV.FASE_PROCESSO NOT LIKE '%ARQUIVADO%'
    AND ((TABNOV.FASE_PROCESSO NOT LIKE '%ARQUIVADO%')
        OR (TABNOV.FASE_PROCESSO IS NULL)                
        OR (TABNOV.STATUS <> 'ARQUIVADO'))                        
    AND (TABNOV.STATUS <> 'ARQUIVADO')                         
    AND (TABNOV.ADVOGADO_DILIGENTE LIKE "%MONICA%")
    AND (TABNOV.GARANTIA_REAL = 'S')
  • 1

    I use 4 Tabs in this Subquery of Clients, Processes, Movements and Units as it would be with these 4 tables? shows only one example...

  • 1

    The person who designed this bench has already given me the chicken jumping... Many of the routines get very slow because of one of these tables... I have to turn around to make the research and reports spin faster...

  • 1

    I will set here select according to my tip and as soon as I give time send you

  • Check the answer edition.

  • ok I’ll check

  • I did the tests and it takes about 2:30 minutes more work... With the help of some friends here I can do otherwise. a little faster, about 1:50 seconds. Thanks for the help I will mark your answer as accepted.

  • I will study more about this command... very good...

  • It is a very good command, help in several cases, good luck with your problem!

  • is already solved!

Show 4 more comments

Browser other questions tagged

You are not signed in. Login or sign up in order to post.