Fórum Select traz resultado duplicado #402406

06/06/2011

0

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

Responder

Posts

10/06/2011

Eliel Martins

  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
Responder

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
Responder

Gostei + 0

24/06/2011

Antônio Neto

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

Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar