Resultados duplicados

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
Avatar do usuário
tatianeweb
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 10
Registrado em: Ter, 26 Fev 2008 5:20 pm
Localização: ARACAJU-SE
Tati

Olá pessoal, hoje que to com um problema que eu não to conseguindo resolver, é o seguinte:

fiz um select para me retornar 21 campos, mas só ta retornando um registro só n vezes, entrei em looping... Só que eu não to conseguindo identificar onde ta esse erro!

O select é um pouco grande e eu tentei organizar o maximo pra vocês entenderem e poderem me ajudar, ta aí:

Selecionar tudo

SELECT lpad(d.cod_dependente,12,'0') || 
lpad(sd.cod_servidor,12,'0') || 
 decode(sd.cod_parentesco,
       '20',1,
       '4',2,        
       '5',2,        
       '8',2,        
       '9',2,        
       '12',2,
       '16',2,
       '19',2,
       '21',2,
       '2',3,
       '3',3,
       '10',4,
       '1',5,
       '18',8,
        0) ||
to_char(dd.dta_vigencia, 'ddmmyyyy') || 
 case
     when dd.cod_tipo_depend = 2 then 'S'
 else 'N'
 end ||
lpad(' ',1) || lpad(' ',8) || lpad(' ',1) || lpad(' ',8) || -- os lpads em branco é pra gerar colunas em branco
to_char(dd.dta_vigencia, 'ddmmyyyy') ||  
 case 
     when dd.cod_motivo_ini_dependência = 3 then '1'
     when dd.cod_motivo_ini_dependência = 5 then '2'
 else '3' 
 end || 
p.cod_sexo || 
to_char(d.dta_nasc, 'yyyymmdd') ||
m_nascimento.sgl_uf || 
lpad(' ',18) || 
m_cartorio.sgl_uf || 
lpad(d.num_cert_nasc,20,' ') || 
lpad(d.num_livro_cert_nasc,20,' ') || 
lpad(d.num_folha_cert_nasc,20,' ') || 
to_char(d.dta_emissao_cert_nasc, 'ddmmyyyy') || 
 decode(p.cod_parentesco,
       '19','U',
       '5','I',
       '7','I',
       '12','I',
       '15','I',
       '16','I',
       '17','I',
       'N')
from dependentes d, servidor_dependente sd, parentesco p, municipio m_nascimento, municipio m_cartorio, dependente_dependência dd

where sd.cod_dependente = d.cod_dependente
and d.cod_munic_nasc = m_nascimento.cod_municipio 
and d.cod_munic_cartorio = m_cartorio.cod_municipio 
and sd.cod_parentesco = p.cod_parentesco;
Exemplo do resultado

000000002887000000002728222052001S 220520013M19810425SE SE A CORRIGIR A CORRIGIR A CORRIGIR09099999N

todos os resultados foram iguais eu cancelei a execução do select já estava em 13573 linhas

E aí??? alguém pode me ajudar nisso aí???
Valeu pessoal
gokden
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 264
Registrado em: Dom, 19 Ago 2007 8:18 pm
Localização: Ribeirão Preto - SP
Lucas de Souza

OCA Developer
Analista de sistemas

tenta usar o " DISTINCT " =D
ai o select fica assim:

Selecionar tudo

SELECT DISTINCT lpad(d.cod_dependente,12,'0') ...
etc... etc... etc..... 
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Tati, boa tarde.

Só se preocupe com uma coisa: O Distinct como nosso amigo mencionou, até pode resolver teu caso, caso não seja problema de produto cartesiano, tudo bem?

Se não for isso, tranquilo em se usar o distinct.

O que notei é, você tem 6 tabelas e, pode estar faltando JOIN entre elas:

Selecionar tudo

from dependentes d, servidor_dependente sd, parentesco p, municipio m_nascimento, municipio m_cartorio, dependente_dependência dd 

where sd.cod_dependente = d.cod_dependente 
and d.cod_munic_nasc = m_nascimento.cod_municipio 
and d.cod_munic_cartorio = m_cartorio.cod_municipio 
and sd.cod_parentesco = p.cod_parentesco; 
São 6 tabelas e 4 relacionamentos.
Está certo mesmo?

Percebi que a tabela dependente_dependência dd não está relacionada com ninguém.

qualquer coisa, manda ai.
Avatar do usuário
tatianeweb
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 10
Registrado em: Ter, 26 Fev 2008 5:20 pm
Localização: ARACAJU-SE
Tati

Realmente o problema era o produto cartesiano
fiz o join que faltava com a tabela dependente_dependência e deu certo!

Valeu mesmo pessoal
bjus
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 7 visitantes