Fórum Select traz resultado duplicado #402406
06/06/2011
0
Uso Delphi 7 + Firebird 1.5 + clientDataset
Num sistema de exames de laboratório de animais (bovinos), tenho as seguintes tabelas:
ANIMAIS
ani_cod - I - PK
ani_nome - V(40)
ani_painome - V(40)
ani_maenome - V(40)
EXAMES --> Tabela principal de exames (mestre) registra-se o cliente, a data do exame e o Nro. do Caso (EXE_CASO)
Exe_Cod - I - PK
Cli_Cod - I - FK - Codigo do cliente/criador
DETEXAMES --> Detalhe de Exames
Exe_Cod - I - FK - chave primária em EXAMES
ite_exe_cod - I - PK
ite_item - I ->>> nro do item sequencial no exame
ani_cod - I - FK ->>> código do animal
exe_caso - V(7) ->>> nro do exame gerado sequencialmente, com combinação especial: BR00345, BR00346, etc..
DNAEXAMES --> Detalhe de Exames
Exe_Cod - I - FK - chave primária de exames
dna_exe_cod _ I - PK
dna_item - I ->>> nro do sequencial no exame
ani_cod - I FK ->>> código do animal
exe_caso - V(7) ->> nro do exame....
EXAMES...: tabela mestre de cadastro de exames
DETEXAMES: tabela detalhe para exame de tipagem sanguinea
DNAEXAMES: tabela detalhe para exame de análise de DNA
Num mesmo exame (Exemplo: BR00345) cadastramos o animal para fazer
um dos exames ou os dois (tipagem e DNA),
então cadastramos o animal nos dois cadastros de exames (tabelas) ou apenas em uma
das duas dependendo da finalidade (via de regra cadastramos nas duas)
porque são feitos os dois exames.
ANIMAIS
ANI_COD ANI_NOME ANI_PAINOME ANI_MAENOME
246.662
EXAMES
EXE_COD DATA
14445 02/02/2011
.
.
22119 14/04/2011
DETEXAMES
EXE_COD ITE_EXE_CASO ITE_ITEM ANI_COD EXE_CASO
14445 101 1 246.662 BR00345
14445 102 2 241.009 BR00345
14445 103 3 237.887 BR00345
.
.
.
22119 4101 1 246.662 BR00561
22119 4102 2 212.043 BR00561
22119 4103 3 209.852 BR00561
DNAEXAMES
EXE_COD DNA_EXE_CASO DNA_ITEM ANI_COD EXE_CASO
14445 101 1 246.662 BR00345
14445 102 2 241.009 BR00345
14445 103 3 237.887 BR00345
.
.
.
22119 4101 1 246.662 BR00561
22119 4102 2 212.043 BR00561
22119 4103 3 209.852 BR00561
Com os dados acima estou representando que existem EXAMES cadastrados (14445...22119),
nestes EXAMES temos registros nas tabelas detalhe DETEXAMES E DNAEXAMES,
cada uma delas com alguns animais associados a um mesmo caso e a um mesmo exame (PK).
Observe que o animal 246.662, esta cadastrado no exame 14445 com nro. de caso BR00345 e
também está em outro exame 22119 com o nro. de caso BR00561. Então acontece do animal
fazer mais de um exame ao logo dos anos.
Precisamos que ao informar o nome do animal o sistema consiga
localizar em quais EXAMES o animail foi analisado tanto DETEXAMES quanto DNAEXAMES.
O resultado que estou obtendo esta trazendo com duplicidades, conforme pode ser visto
na imagem e o codigo que estou usando é o abaixo:
Select A.Ani_Cod, A.ani_nome,A.ani_painome,
B.Rca_Descricao,
C.Exe_Caso, C.ite_item,
D.exe_caso, D.dna_item
From Animais A
Left Join Racas B on A.Rca_Sigla = B.Rca_Sigla
Left Join DetExames C on A.Ani_Cod = C.Ani_Cod
Left Join Dnaexames D on A.Ani_Cod = D.Ani_Cod
Where A.Ani_Nome = 'LUAR DA CANAÃ'
Obrigado a todos.
Neto
Antônio Neto
Curtir tópico
+ 0Posts
10/06/2011
Eliel Martins
Não tem como você mandar o script das tabelas e um script com os insert destas tabelas ?, fica mais fácil para verificar.
Tenha um ótimo dia !
Eliel G. Martins
Gostei + 0
24/06/2011
Adriano Nascimento
Bom dia Antonio,
Pelo que eu entendi o resultado que esta retornando está correto, neste caso a partir dos dados que você enviou o resultado que retornou foi o da imagem abaixo.
Neste caso ocorre que as 2 primeiras linhas é referente à tabela DetExames e as outras 2 linhas é referente à tabela Dnaexames.
Seria este mesmo o resultado que está retornando para você?
Qualquer problema estou à disposição.
Att,
Adriano Nascimento
Gostei + 0
24/06/2011
Antônio Neto
É isso mesmo que vc disse retorna a imagem dos dados.
O que acontecia é que as vezes não tinha em uma das tabelas ele estava trazendo,
bastoou eu colocar inner join ao invés de left join que resolveu.
Muito obrigado Adriano
Abraços
Neto
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)