Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Einstein

Registros Duplicados

Recommended Posts

Ola pessoal tudo bem?

 

Estou com uma grande duvida que nao consigo sanar.

 

Tenho duas tabelas e estou vinculando-as conforme o select abaixo. Ao inves de mostrar apenas 11 registro conforme consultei em cada tabela, no select de vinculos, ela mostra 37 registros (duplicacao) e nao sei onde estou errando.

 

 

tab1--tabela

campos

tab1_cod

tab1_nom

tab1_endereco

 

tab2--tabela

campos

tab2_cod

tab2_filho

tab2_carro

 

o meu select

 

select tab1_cod,tab1.nome,tab1.endereco,tab2.cod,tab2.filho,tab2.carro

from tab1,tab2

where tab2.cod = tab1.cod and tab1.cod = 754

 

ele mostra tudo duplicado ao inves de 11 registros.

 

Grato

Edson

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Nada parece errado apenas o resultado normal de um produto cartesisno entre tabelas do tipo pai/filho.

 

 

MAS SE EU USAR O GROUP BY , O QUE ADIANTARÁ NESSA SITUAÇAO.

 

 

É MUITO ESTRANHO ISSO.

 

desliga o caps ¬¬

brincadeira....

 

qdo você faz este where

 

where tab2.cod = tab1.cod and tab1.cod = 754

ele vai igualar as tabelas nos campos porem se algum campo tiver diferente ele vai duplicar as linhas, independente se você trouxer ele ou nao no select

 

select tab1_cod,tab1.nome,tab1.endereco,tab2.cod,tab2.filho,tab2.carro

 

por isso a necessidade do group by

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 

Nada parece errado apenas o resultado normal de um produto cartesisno entre tabelas do tipo pai/filho.

 

 

MAS SE EU USAR O GROUP BY , O QUE ADIANTARÁ NESSA SITUAÇAO.

 

 

É MUITO ESTRANHO ISSO.

 

desliga o caps ¬¬

brincadeira....

 

qdo você faz este where

 

where tab2.cod = tab1.cod and tab1.cod = 754

ele vai igualar as tabelas nos campos porem se algum campo tiver diferente ele vai duplicar as linhas, independente se você trouxer ele ou nao no select

 

select tab1_cod,tab1.nome,tab1.endereco,tab2.cod,tab2.filho,tab2.carro

 

por isso a necessidade do group by

 

 

Desculpe pelo caps lock..rsrs.

 

tem algum select que possa me dar a diferenca desse campo, tipo comparar o campo tb1.cod com tb2.cod ?

nao consigo pensar num comando especifico deste nivel.

 

o campo que você fala que pode estar diferente é o do codigo , certo?

caso esse campo no decorrer da tabela1, na esteja exato com o da tabela2 ele duplica. correto ?

 

edson

Compartilhar este post


Link para o post
Compartilhar em outros sites

vamos por partes :P

tem algum select que possa me dar a diferenca desse campo, tipo comparar o campo tb1.cod com tb2.cod ?

nao consigo pensar num comando especifico deste nivel.

 

o campo que você fala que pode estar diferente é o do codigo , certo?

caso esse campo no decorrer da tabela1, na esteja exato com o da tabela2 ele duplica. correto ?

 

Não... não eh o codigo e sim algum campo que você nao esta trazendo no select....

por mais que você defina os campos no select, se um campo QUE você NAO ESTA TRAZENDO NO RESULTADO estiver diferente ele vai duplicar a linha.

Parece complicado neh... vou fazer um exemplo e jah posto logo em seguida....

 

Qual a versao do SQL?

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

vamos por partes :P

 

tem algum select que possa me dar a diferenca desse campo, tipo comparar o campo tb1.cod com tb2.cod ?

nao consigo pensar num comando especifico deste nivel.

 

o campo que você fala que pode estar diferente é o do codigo , certo?

caso esse campo no decorrer da tabela1, na esteja exato com o da tabela2 ele duplica. correto ?

 

Não... não eh o codigo e sim algum campo que você nao esta trazendo no select....

por mais que você defina os campos no select, se um campo QUE você NAO ESTA TRAZENDO NO RESULTADO estiver diferente ele vai duplicar a linha.

Parece complicado neh... vou fazer um exemplo e jah posto logo em seguida....

 

Qual a versao do SQL?

 

Abçs

 

 

Estou usando o SQL Manager 2007 for PostgreeSql

FAço a conexao no BD PostgreeSQL e construo as querys para as minhas pesquisas.

 

Edson

Compartilhar este post


Link para o post
Compartilhar em outros sites

hum.. o db entao eh postgree... nao manjo dele... mas com o group by resolveu???

 

Nao.

 

no query sql, consigo fazer tudo que faço no sql server, por ser padrao.

 

Nesse programa que te disse: sql manager 2007, faço tudo, desde um delete (via sql) até drop (via sql).

Por issoque pintou essa duvida.

tem as mesmas funcionalidades como se tivesse trabalhando no sql server.

mesmo assim, por favor, mande-me o exemplo.

te falo se consegui.

 

obs. no group by nao deu certo.

 

edson

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Einstein.

 

Orientação que recebi do instrutor, em um exemplo simples, talvez possa auxiliar.

 

Quando for uma lista usa-se GROUP BY, para não duplicar registros basta adicionar

 

HAVING COUNT (nome_do_campo) = 1;

 

Abraços

 

 

(vou levar pedrada do Motta :lol: ,rsrss)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isto ou o DISTINCT mas lembre quando precisar de uma "gambiarra" como esta revise o SQL, o modelo ou ambos, pode estar mascarando um erro maior.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isto ou o DISTINCT mas lembre quando precisar de uma "gambiarra" como esta revise o SQL, o modelo ou ambos, pode estar mascarando um erro maior.

 

Motta, aprendi SQL dessa forma, em exercícios simples.

 

Então pergunto, qual a maneira correta?

 

Tem relação com o tipo de BD considerar a consulta dessa forma como "gambiarra"? Ou significa que a modelagem não está adequada?

 

 

Penso que uma modelagem falha, gere uma consulta com erros, isso é ponto de vista de quem ainda conhece quase nada do assunto, mas tem interesse em comprender.

 

 

Abraços.

 

 

(não tô nem aí com as pedradas, conhecimento sempre acrescenta ^_^ )

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou tentar ser mais claro, em geral, quando se coloca um DISTINCT para se consertar um SQL e tirar as duplicidades você cai num caso daquele de que falei, você pode estar mascarando um erro maior.

 

O DISTINCT pode ser perfeitamente normal.

 

Ex : Liste Membros que postaram em SQL Server :

 

SELECT M.COD,M.EMAIL
FROM MEMBROS M,POSTS P
WHERE M.COD = P.COD
AND P.FORUM = "SQL Server"

Em geral o join é mais rápico que o subselect com EXISTS ou IN mas retorna o produto cartesisano de MEMBROS e POSTS, solução para isto, o DISTINCT.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigada Motta, anotei aqui.

 

 

A experiência de quem domina o assunto é sempre bem vinda.

 

Ainda não alcanço a extensão do que você falou, mas vou ficar atenta.

 

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.