 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
will_pacini Aprendiz

Registrado: Quarta-Feira, 5 de Janeiro de 2011 Mensagens: 214
|
Enviada: Sex Fev 17, 2017 10:30 am Assunto: Comando Select trazendo resultado repetido |
|
|
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 |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Sex Fev 17, 2017 10:43 am Assunto: |
|
|
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?
Editado pela última vez por imex em Seg Out 02, 2023 11:41 am, num total de 1 vez |
|
| Voltar ao Topo |
|
 |
will_pacini Aprendiz

Registrado: Quarta-Feira, 5 de Janeiro de 2011 Mensagens: 214
|
Enviada: Sex Fev 17, 2017 10:54 am Assunto: |
|
|
| 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?
|
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 |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Sex Fev 17, 2017 1:11 pm Assunto: |
|
|
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 |
|
 |
will_pacini Aprendiz

Registrado: Quarta-Feira, 5 de Janeiro de 2011 Mensagens: 214
|
Enviada: Sex Fev 17, 2017 1:29 pm Assunto: |
|
|
| 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 |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Sex Fev 17, 2017 2:41 pm Assunto: |
|
|
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 |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|