Firebird SQL and Union ALL without Duplicating Items

8

I have a SQL query that searches two tables for a primary and one for history but when I run the query the values come duplicated I use UNION All because if I by UNION or DISTINCT displays the following message:

  

Unsuccessful execution caused by an unavailable resource.Sort record   size of 104518 bytes is too big.

breaching:

  

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

How can I resolve 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')
    
asked by anonymous 26.10.2017 / 19:12

1 answer

2

Instead of using sub-querys like 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 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 have set an example as requested, please do not copy and paste just ... Check how I did it and change it according to your needs, you can have a little something or something wrong there.

Of a searched for 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')
    
14.05.2018 / 13:12