[firebase-br] SQL/Consulta complexa - Firebird 2.1

Douglas Silva forum_firebird em daunebr.com
Ter Mar 9 17:28:01 -03 2010


Use LEFT JOIN em vez de INNER JOIN.




________________________________
From: Reijanio Nunes Ribeiro <rnribeiro em gmail.com>
To: FireBase <lista em firebase.com.br>
Sent: Tue, March 9, 2010 3:54:26 PM
Subject: Re: [firebase-br] SQL/Consulta complexa - Firebird 2.1

faz um testetirando os paranteses após o on
INNER JOIN INSTRUTORES
ON TELEFONES.ID_INSTRUTOR = INSTRUTORES.ID_INSTRUTOR
  INNER JOIN EMAILS
ON INSTRUTORES.ID_INSTRUTOR = EMAILS.ID_INSTRUTOR

de repente esssa sintase fica melhor se vc tentar assim

SELECT
   I.ID_INSTRUTOR,
   I.INSTRUTOR,
   E.EMAIL,
   T.TELEFONE
FROM INSTRUTORES I
  INNER JOIN TELEFONES T
ON I.ID_INSTRUTOR = T.ID_INSTRUTOR
  INNER JOIN EMAILS E
ON I.ID_INSTRUTOR = E.ID_INSTRUTOR
tenta ai ve se da certo, qq coisa da um retorno pois n testei essa senteça

Em 9 de março de 2010 12:17, Eduardo Belo <beloelogica em gmail.com> escreveu:

> Amigos,
>
> Tenho as seguintes tabelas:
>
> TABLE INSTRUTORES
>  ID_INSTRUTOR  INTEGER NOT NULL,
>  INSTRUTOR     VARCHAR(80)
>
> TABLE EMAILS
>  ID_EMAIL      INTEGER NOT NULL,
>  ID_INSTRUTOR  INTEGER NOT NULL,
>  EMAIL         VARCHAR(80)
>
> TABLE TELEFONES
>  ID_TELEFONE   INTEGER NOT NULL,
>  ID_INSTRUTOR  INTEGER NOT NULL,
>  TELEFONE      VARCHAR(14)
>
> CHAVE RELACIONAMENTO = ID_INSTRUTOR
>
> ****************************************************
>
> Efetuando o select abaixo:
>
> SELECT
>    INSTRUTORES.ID_INSTRUTOR,
>    INSTRUTORES.INSTRUTOR,
>    EMAILS.EMAIL,
>    TELEFONES.TELEFONE
> FROM TELEFONES
>   INNER JOIN INSTRUTORES ON (TELEFONES.ID_INSTRUTOR =
> INSTRUTORES.ID_INSTRUTOR)
>   INNER JOIN EMAILS ON (INSTRUTORES.ID_INSTRUTOR = EMAILS.ID_INSTRUTOR)
>
> Retorno consulta:
>
> INSTRUTOR       EMAIL                   TELEFONE
> --------------------------------------------------
> MARIA          maria em hotmail.com       8605-9395
> JOSE            jose em yahoo.com.br       3445-6181
> JOSE            jose@@hotmail.com       9998-8294
> JOAO            joao em gmail.com          9133-3824
> JOAO            joao em gmail.com          3181-8037
> JOAO            joao em gmail.com          3426-9322
> JOAO            joao em yahoo.com.br       9133-3824
> JOAO            joao em yahoo.com.br       3181-8037
> JOAO            joao em yahoo.com.br       3426-9322
>
>
> Observem que no caso de JOAO ele tem 2 email e 3 telefones e
> retorna duplicado nos telefones. Eu preciso que nesse caso ele
> retorne 2 emails e 3 telefones:
>
> JOAO            joao em gmail.com          9133-3824
> JOAO            joao em yahoo.com.br       3181-8037
> JOAO                                    3426-9322
>
> Tem como fazer um SELECT para retornar assim ?
>
> Ou existe algum erro na minha modelagem ?
>
> Eu preciso de tabelas idependentes de e-mail e teofne uma vez
> que o instrutor pode ter vários telefones e emails.
>
> Qual a solução para este caso?
>
> Agradeço a todos que ajudarem.
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa



Mais detalhes sobre a lista de discussão lista