ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Comando Select trazendo resultado repetido

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
will_pacini
Aprendiz
Aprendiz


Registrado: Quarta-Feira, 5 de Janeiro de 2011
Mensagens: 198

MensagemEnviada: Sex Fev 17, 2017 10:30 am    Assunto: Comando Select trazendo resultado repetido Responder com Citação

Olá pessoal, possuo o seguinte comando:

Código:

  ds.DataSet.Close;
    with dmVisita.qryVHV do
       begin
         Close;
         sql.Clear;
         SQL.Add( ' Select '+
                  ' HVH.Visita_His_Visita as IDHVH,                                    '+
                  ' His.DataVisita_Prevista as DataPrevista,                           '+
                  ' His.Data_Visita as DataEfetiva,                                    '+
                  ' His.Data_Retorno as DataRet,                                       '+
                  ' His.Falou_Quem as FalouQuem,                                       '+
                  ' His.NomeFunc_Visitou as FuncVisitou,                               '+
                  ' His.Id_Func_Visitou as IdFuncVisitou,                              '+
                  ' His.Obs as Obs,                                                    '+
                  ' His.Id_Funcionario,                                                '+
                  ' His.Valor_Previsto,                                                '+
                  ' Funcionario.Nome  as FuncionarioVisita,                            '+
                  ' Visita.Cod,                                                        '+
                  ' Visita.Exclui,                                                     '+
                  ' Visita.Fechou,                                                     '+
                  ' Visita.Id_Visita,                                                  '+
                  ' Escola.Nome_Escola as NomeEscola,                                  '+
                  ' Escola.Id_Escola                                                   '+
                  ' from Visita_His_Visita as HVH                                      '+
                  ' inner Join Visita as Visita                                        '+
                  ' on Visita.Id_Visita = HVH.ID_Visita                                '+
                  ' inner join Historico_visita as His                                 '+
                  ' on His.Id_Historico_Visita = HVH.Id_Historico_Visita               '+
                  ' inner join Funcionario                                             '+
                  ' on Funcionario.Id_Funcionario = His.Id_Funcionario                 '+
                  ' inner join Escola as Escola                                     '+
                  ' on Escola.Id_Escola = Visita.Id_Escola                    '+
                  ' where Visita.Fechou = 0                                        '+
                  ' and Visita.Exclui = 0                                              ');

       end;
  ds.DataSet.Open;


Ele filtra o que eu preciso mas o resultado sempre vem duplicado,

O que estou fazendo de errado?

Obrigado
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 10255

MensagemEnviada: Sex Fev 17, 2017 10:43 am    Assunto: Responder com Citação

Bom dia,

Como é o relacionamento entre as tabelas Visita e Visita_His_Visita?
E entre as tabelas Visita_His_Visita e Historico_visita?
1:1? 1:N? N:N?
Qual banco de dados (e versão) você está utilizando?

_________________
Assinatura: http://www.imoveisemexposicao.com.br/imoveis-venda-guarulhos-residencial-casa
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
will_pacini
Aprendiz
Aprendiz


Registrado: Quarta-Feira, 5 de Janeiro de 2011
Mensagens: 198

MensagemEnviada: Sex Fev 17, 2017 10:54 am    Assunto: Responder com Citação

imex escreveu:
Bom dia,

Como é o relacionamento entre as tabelas Visita e Visita_His_Visita?
E entre as tabelas Visita_His_Visita e Historico_visita?
1:1? 1:N? N:N?
Qual banco de dados (e versão) você está utilizando?

_________________
Assinatura: http://www.imoveisemexposicao.com.br/imoveis-venda-guarulhos-residencial-casa


Olá Imex,

A tabela VISITA_HIS_VISITA contém a FK da Visita e Histórico_Visita

Sendo assim, pelo menos era a intenção,

Visita é 1:N em VISITA_HIS_VISITA
Histórico_Visita é N:N em VISITA_HIS_VISITA

Estou usando Firebird 2.5 e Xe3,

No Sql Windows do Delphi o mesmo comando me retorna apenas um resultado.

Obrigado.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 10255

MensagemEnviada: Sex Fev 17, 2017 1:11 pm    Assunto: Responder com Citação

Quando você disse duplicado, seria mais de um registro por visita?
Como o relacionamento entre Visita e Visita_His_Visita é de 1:N, com a sua query serão retornados N registros para cada visita.
Sem contar o relacionamento entre Historico_Visita e Visita_His_Visita que é de N:N.
Você pode postar um exemplo de como está ficando o resultado da sua query e como gostaria que ficasse?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
will_pacini
Aprendiz
Aprendiz


Registrado: Quarta-Feira, 5 de Janeiro de 2011
Mensagens: 198

MensagemEnviada: Sex Fev 17, 2017 1:29 pm    Assunto: Responder com Citação

imex escreveu:
Quando você disse duplicado, seria mais de um registro por visita?
Como o relacionamento entre Visita e Visita_His_Visita é de 1:N, com a sua query serão retornados N registros para cada visita.
Sem contar o relacionamento entre Historico_Visita e Visita_His_Visita que é de N:N.
Você pode postar um exemplo de como está ficando o resultado da sua query e como gostaria que ficasse?


Por exemplo, eu tenho apenas uma visita, então dentro dessa visita eu possuo os históricos das visitas.

O comando que postei era apenas para listar todas as visitas que ainda estão em aberto, junto com o select eu pego os dados que preciso,

Então no meu banco só tem um registro de visita, cod 22, 23...

Nessa pesquisa eu quero que mostre todas que estão em aberto, ele mostra mas no grid ele joga duas vezes a 22, duas 23... e assim por diante, independente da quantidade que eu tenho no registro do histórico, ele me mostra em duplicidade os dados da visita.

Não sei se deu para compreender dessa maneira
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 10255

MensagemEnviada: Sex Fev 17, 2017 2:41 pm    Assunto: Responder com Citação

Pela sua query, se existirem 5 registros na tabela Visita_His_Visita para a mesma visita, deverão ser retornados esses 5 registros no resultado, se existirem 8 deverão ser retornados esses 8, e assim por diante. Sem contar os Joins com as outras tabelas.
Acho melhor você fazer testes deixando a tabela Visita depois do From sem nenhum Join, para depois adicionar os Joins, um de cada vez, até perceber diferença na quantidade de registros retornada. E de preferência testar através de alguma ferramenta de administração do banco de dados como o IBExpert ou outra semelhante.

Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB