Query returning duplicate values

2

People I posted here in the topic SQL Query with Duplicate Items I just have another question I have sql:

SELECT 
  TABNOV.CODIGO_ANDAMENTO,
  TABNOV.NUMERO_PROCESSO,
  TABNOV.INSTANCIA,
  TABNOV.DESCRICAO_ANDAMENTO,
  TABNOV.ACESSO_PUBLICO,
  TABNOV.DATA,
  TABNOV.DATA_INCLUSAO,
  TABNOV.HORA,
  TABNOV.EMAIL_ENVIADO,
  TABNOV.CODIGO_PUBLICACAO,
  TABNOV.CODIGO_CONSULTA,
  TABNOV.CODIGO_AUDIENCIA,
  TABNOV.CODIGO_AGENDAMENTO,
  TABNOV.USUARIO_CADASTRO,
  TABNOV.USUARIO_ALTERACAO,
  TABNOV.DATA_ALTERACAO,
  TABNOV.HORA_ALTERACAO,
  TABNOV.OBSERVACAO,
  TABNOV.NOME_IMAGEM_ANDAMENTO,
  TABNOV.NUMERO_PROCESSO_AUX,
  TABNOV.ATO_FATURAVEL
FROM                                                                 
  ( SELECT
      T1.*
    FROM
      ANDAMENTOS_PROCESSUAIS T1
      LEFT JOIN PROCESSOS T2 ON T1.NUMERO_PROCESSO = T2.NUMERO_PROCESSO
    WHERE (T1.NUMERO_PROCESSO_AUX = T2.NUMERO_PROCESSO)
    AND   (T2.FASE_PROCESSO LIKE "ARQUIVADO")
    UNION ALL                                                          
    SELECT                                                             
      T1.*                                                              
    FROM                                                               
      ANDAMENTOS_PROCESSUAIS T1                                         
      LEFT JOIN PROCESSOS T2 ON T1.NUMERO_PROCESSO = T2.NUMERO_PROCESSO 
    WHERE (T1.NUMERO_PROCESSO_AUX = T2.NUMERO_PROCESSO2)               
    AND   (T2.FASE_PROCESSO2 LIKE "ARQUIVADO")
    UNION ALL                                                          
    SELECT                                                             
      T1.*                                                              
    FROM                                                               
      ANDAMENTOS_PROCESSUAIS T1                                         
      LEFT JOIN PROCESSOS T2 ON T1.NUMERO_PROCESSO = T2.NUMERO_PROCESSO 
    WHERE (T1.NUMERO_PROCESSO_AUX = T2.NUMERO_PROCESSO3)               
    AND   (T2.FASE_PROCESSO3 LIKE "ARQUIVADO")                         
    UNION ALL                                                       
    SELECT                                                        
      T1.*                                                              
    FROM                                                               
      ANDAMENTOS_PROCESSUAIS T1                                         
      LEFT JOIN PROCESSOS T2 ON T1.NUMERO_PROCESSO = T2.NUMERO_PROCESSO 
    WHERE (T1.NUMERO_PROCESSO_AUX = T2.NUMERO_PROCESSO4)               
    AND   (T2.FASE_PROCESSO4 LIKE "ARQUIVADO")                         
    UNION ALL                                                          
    SELECT
      T1.*                                                              
    FROM                                                               
      ANDAMENTOS_PROCESSUAIS T1                                         
      LEFT JOIN PROCESSOS T2 ON T1.NUMERO_PROCESSO = T2.NUMERO_PROCESSO 
    WHERE (T1.NUMERO_PROCESSO_AUX = T2.NUMERO_PROCESSO5)               
    AND   (T2.FASE_PROCESSO5 LIKE "ARQUIVADO")                         
    UNION ALL                                                          
    SELECT                                                            
      T1.*                                                              
    FROM                                                               
      ANDAMENTOS_PROCESSUAIS T1                                         
      LEFT JOIN PROCESSOS T2 ON T1.NUMERO_PROCESSO = T2.NUMERO_PROCESSO 
    WHERE (T1.NUMERO_PROCESSO_AUX = T2.NUMERO_PROCESSO6)               
    AND   (T2.FASE_PROCESSO6 LIKE "ARQUIVADO")                         
    UNION ALL                                                          
    SELECT                                                             
      T1.*                                                              
    FROM                                                               
      ANDAMENTOS_PROCESSUAIS T1                                         
      LEFT JOIN PROCESSOS T2 ON T1.NUMERO_PROCESSO = T2.NUMERO_PROCESSO 
    WHERE (T1.NUMERO_PROCESSO_AUX = T2.NUMERO_PROCESSO7)               
    AND   (T2.FASE_PROCESSO7 LIKE "ARQUIVADO")                         
    UNION ALL                                                          
    SELECT                                                             
      T1.*                                                              
    FROM                                                               
      ANDAMENTOS_PROCESSUAIS T1                                         
      LEFT JOIN PROCESSOS T2 ON T1.NUMERO_PROCESSO = T2.NUMERO_PROCESSO 
    WHERE (T1.NUMERO_PROCESSO_AUX = T2.NUMERO_PROCESSO8)               
    AND   (T2.FASE_PROCESSO8 LIKE "ARQUIVADO")) TABNOV 

and it actually follows another six Unions only that some of the items appear duplicate and at the moment of passing the query items to the PK duplicity error table I do not know what to do since the registration in the main table does not is duplicate?

Table structure:

CREATE TABLE ANDAMENTOS_PROCESSUAIS (
  CODIGO_ANDAMENTO INTEGER NOT NULL,
  NUMERO_PROCESSO VARCHAR(30) NOT NULL,
  INSTANCIA INTEGER NOT NULL,
  DESCRICAO_ANDAMENTO VARCHAR(200),
  ACESSO_PUBLICO VARCHAR(1) NOT NULL,
  DATA DATE NOT NULL,
  DATA_INCLUSAO DATE,
  HORA VARCHAR(5) NOT NULL,
  EMAIL_ENVIADO VARCHAR(1),
  CODIGO_PUBLICACAO INTEGER,
  CODIGO_CONSULTA INTEGER,
  CODIGO_AUDIENCIA INTEGER,
  CODIGO_AGENDAMENTO INTEGER,
  USUARIO_CADASTRO VARCHAR(15),
  USUARIO_ALTERACAO VARCHAR(15),
  DATA_ALTERACAO DATE,
  HORA_ALTERACAO VARCHAR(5),
  OBSERVACAO VARCHAR(8100),
  NOME_IMAGEM_ANDAMENTO VARCHAR(50),
  NUMERO_PROCESSO_AUX VARCHAR(30) NOT NULL,
  ATO_FATURAVEL VARCHAR(1));
ALTER TABLE ANDAMENTOS_PROCESSUAIS ADD CONSTRAINT PK_ANDAMENTOS_PROCESSUAIS PRIMARY KEY (CODIGO_ANDAMENTO);

ALTER TABLE ANDAMENTOS_PROCESSUAIS ADD CONSTRAINT FK_AND_NUMERO_PROCESSO FOREIGN KEY (NUMERO_PROCESSO) REFERENCES PROCESSOS(NUMERO_PROCESSO);

CREATE TABLE PROCESSOS (
  NUMERO_PROCESSO VARCHAR(30) NOT NULL,
  FASE_PROCESSO VARCHAR(25) NOT NULL,
  NUMERO_PROCESSO2 VARCHAR(30),
  FASE_PROCESSO2 VARCHAR(25),
  NUMERO_PROCESSO3 VARCHAR(30),
  FASE_PROCESSO3 VARCHAR(25),
  NUMERO_PROCESSO4 VARCHAR(30),
  FASE_PROCESSO4 VARCHAR(25),
  NUMERO_E_VARA4 VARCHAR(25),
  NUMERO_PROCESSO5 VARCHAR(30),
  FASE_PROCESSO5 VARCHAR(25),
  NUMERO_PROCESSO6 VARCHAR(30),
  FASE_PROCESSO6 VARCHAR(25),
  NUMERO_PROCESSO7 VARCHAR(30),
  FASE_PROCESSO7 VARCHAR(25),
  NUMERO_PROCESSO8 VARCHAR(30),
  FASE_PROCESSO8 VARCHAR(25),
  OBSERVACAO VARCHAR(2000));
    
asked by anonymous 13.07.2017 / 20:46

1 answer

2

I believe you can do this:

SELECT 
  TABNOV.CODIGO_ANDAMENTO,
  TABNOV.NUMERO_PROCESSO,
  TABNOV.DESCRICAO_ANDAMENTO,
  TABNOV.DATA,
  TABNOV.DATA_INCLUSAO,
  TABNOV.HORA,
  TABNOV.EMAIL_ENVIADO,
  TABNOV.CODIGO_PUBLICACAO,
  TABNOV.HORA_ALTERACAO,
  TABNOV.NOME_IMAGEM_ANDAMENTO,
  TABNOV.NUMERO_PROCESSO_AUX,
  TABNOV.ATO_FATURAVEL
FROM PROCESSOS T1 
LEFT JOIN ANDAMENTOS_PROCESSUAIS T2 
ON T1.NUMERO_PROCESSO = T2.NUMERO_PROCESSO
AND (T1.NUMERO_PROCESSO = T2.NUMERO_PROCESSO_AUX )
AND   (T1.FASE_PROCESSO LIKE "ARQUIVADO")

LEFT JOIN ANDAMENTOS_PROCESSUAIS T3                                        
T2 ON T1.NUMERO_PROCESSO = T3.NUMERO_PROCESSO 
AND T1.NUMERO_PROCESSO2 = T3.NUMERO_PROCESSO_AUX)               
AND  (T1.FASE_PROCESSO2 LIKE "ARQUIVADO")

You could do several left join like this by repeating and filtering the results by the fields you want. The above QUERY takes all records from the processes table and their relationships if they exist with the procedural table.

I'm not sure it would work. I would need the tables with the data to perform performance tests and if it works properly to what you want and I do not have a full understanding of what you want to do. But it is an attempt to eliminate all these UNIONS consume CPU exaggeration of your machine and generate temporary tables that consume a lot of memory. If there are a number of users running this same query at the same time it could consume the entire resource of your server.

    
13.07.2017 / 23:58