Resultados duplicados

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
  

Mensagemem Qua, 05 Mar 2008 5:43 pm

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í:

Código: Selecionar todos
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_dependencia = 3 then '1'
     when dd.cod_motivo_ini_dependencia = 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_dependencia 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
tatianeweb
Localização: ARACAJU-SE

Tati

Mensagemem Qua, 05 Mar 2008 5:56 pm

tenta usar o " DISTINCT " =D
ai o select fica assim:
Código: Selecionar todos
SELECT DISTINCT lpad(d.cod_dependente,12,'0') ...
etc... etc... etc.....
gokden
Localização: Ribeirão Preto - SP

Lucas de Souza

OCA Developer
Analista de sistemas

Mensagemem Qua, 05 Mar 2008 6:00 pm

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:
Código: Selecionar todos
from dependentes d, servidor_dependente sd, parentesco p, municipio m_nascimento, municipio m_cartorio, dependente_dependencia 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_dependencia dd não está relacionada com ninguém.

qualquer coisa, manda ai.
Trevisolli
Localização: Araraquara - SP

Abraço,

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

Mensagemem Qui, 06 Mar 2008 1:55 pm

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

Valeu mesmo pessoal
bjus
tatianeweb
Localização: ARACAJU-SE

Tati



Voltar para SQL

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante