Select traz resultado duplicado

Firebird

06/06/2011

Olá a todos.
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

Antônio Neto

Curtidas 0

Respostas

Eliel Martins

Eliel Martins

06/06/2011

  Olá Antonio !

  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
Adriano Nascimento

Adriano Nascimento

06/06/2011



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
Antônio Neto

Antônio Neto

06/06/2011

Olá a todos.
É 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
POSTAR