select search in database with repeated records

Asked

Viewed 43 times

0

I’m making a select in my bank, whatever, Postgres, and more records are coming..

For example, id_pessoa comes a 10 more record than should come..

SELECT pac.cns, 
    pac.cns_responsavel, 
    pac.cpf_responsavel, 
    pac.flag_alergico, 
    pac.flag_ativo, 
    pac.microarea, 
    pac.nome_responsavel, 
    pac.observacoes_alergias,
    pac.id_familia,
    pac.id_pessoa,
    pac.id_identidade_genero,
    pac.id_orientacao_sexual, 
    pend.bloco,
    pend.cep,
    pend.complemento,
    pend.nome_bairro,
    pend.nome_logradouro,
    pend.numero,
    pend.ponto_referencia,
    pend.id_bairro,
    pend.id_logradouro,
    pend.id_municipio,
    pend.id_pais,
    pend.id_uf,
    pesfis.carteira_profissional,
    pesfis.certidao_obito,
    pesfis.codigo_reservista,
    pesfis.cpf,
    pesfis.data_cadastro_pis_pasep,
    pesfis.data_obito,
    pesfis.emissao_carteira_profissional,
    pesfis.flag_ativo,
    pesfis.identidade_rg,
    pesfis.orgao_emissor_rg,
    pesfis.pis_pasep,
    pesfis.secao_eleitoral,
    pesfis.serie_carteira_profissional,
    pesfis.titulo_eleitor,
    pesfis.uf_orgao_emissor,
    pesfis.zona_eleitoral,
    pesfis.id_cbo,
    pesfis.id_escolaridade,
    pesfis.id_estado_civil,
    pesfis.id_etnia,
    pesfis.id_nacionalidade,
    pesfis.id_raca_cor,
    pesfis.id_sexo,
    pcarac.estatura,
    pcarac.flag_deficiente,
    pcarac.flag_doador,
    pcarac.peso,
    pcarac.id_cbor,
    pcarac.id_tipo_sanguineo,
    pcarac.id_orientacao,
    pcarac.id_identidade,
    pcarac 
FROM sau.pacientes pac, 
      glb.pessoas_enderecos pend, 
      glb.pessoas_fisicas pesfis, 
      glb.pessoas_caracteristicas pcarac,
      glb.pessoas pe
WHERE pac.id_pessoa= pend.id_pessoa 
        and pend.id_entidade = pesfis.id_entidade 
        and pend.id_pessoa= pesfis.id_pessoa 
        and pesfis.id_entidade = pcarac.id_entidade
        and pesfis.id_pessoa= pcarac.id_pessoa 
        and pcarac.id_entidade =  1;
  • 2

    replicates the environment in sqlfiddle.com and could change the syntax for the joins more clearly. Personally I find this way of doing the joins very confusing. And yes, the problem will be in the joins

  • 1

    Without the data structure of your tables it is difficult to elaborate a good answer.

  • Argh! implicit joins, not even my grandfather program this way anymore

2 answers

0

As you are listing multiple tables, the query return multiple the same record every time it manages to find the searched record in the tables. For example, there is a record in the Sau.patients table and this record has two related records in the glb.persons_addresses table, so due to the relationship this select would return two lines.

Select below to see what is repeating:

SELECT *
FROM sau.pacientes pac, 
      glb.pessoas_enderecos pend, 
      glb.pessoas_fisicas pesfis, 
      glb.pessoas_caracteristicas pcarac,
      glb.pessoas pe
WHERE pac.id_pessoa= pend.id_pessoa 
        and pend.id_entidade = pesfis.id_entidade 
        and pend.id_pessoa= pesfis.id_pessoa 
        and pesfis.id_entidade = pcarac.id_entidade
        and pesfis.id_pessoa= pcarac.id_pessoa 
        and pcarac.id_entidade =  1;

0

Hello! I don’t have any experience with Postgres, but it usually happens due to a bad relationship with other tables (which duplicate the records).

Try using DISTINCT after "SELECT" or a GROUP BY after "WHERE".

Browser other questions tagged

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