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

Eduardo Belo beloelogica em gmail.com
Ter Mar 16 21:10:52 -03 2010


Grande Eduardo,

Vivendo e apredendo. Sua dica junto e a procedure criada pelo Sandro
foi excelente.

Acrescentei o Distinct e ficou perfeito.

Obrigado pela ajuda.

Grande abraço!

SELECT
  INSTRUTORES.INSTRUTOR,
  LIST(DISTINCT EMAILS.EMAIL || ASCII_CHAR(13), '') AS EMAIL,
  LIST(DISTINCT TELEFONES.TELEFONE || ASCII_CHAR(13), '') AS TELEFONE
FROM TELEFONES
 LEFT JOIN INSTRUTORES ON (TELEFONES.ID_INSTRUTOR = INSTRUTORES.ID_INSTRUTOR)
 LEFT JOIN EMAILS ON (INSTRUTORES.ID_INSTRUTOR = EMAILS.ID_INSTRUTOR)
GROUP BY
 INSTRUTORES.INSTRUTOR

Em 15 de março de 2010 15:18, Eduardo Pombo <eduardo em embras.net> escreveu:
> acredito que se usar o Firebird 2.1, possa fazer usando o LIST
>
> SELECT
>   INSTRUTORES.INSTRUTOR,
>   LIST( EMAILS.EMAIL || ASCII_CHAR(13), '') ,
>   LIST( TELEFONES.TELEFONE || ASCII_CHAR(13), '')
> FROM TELEFONES
>  LEFT JOIN INSTRUTORES ON (TELEFONES.ID_INSTRUTOR = INSTRUTORES.ID_INSTRUTOR)
>  LEFT JOIN EMAILS ON (INSTRUTORES.ID_INSTRUTOR = EMAILS.ID_INSTRUTOR)
> GROUP BY
>  INSTRUTORES.INSTRUTOR
>
>
>
>
>
> 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
>>
>
>
>
> --
>
> Atenciosamente
>
> José Eduardo Pombo de Barros
> Gerente de Manutenção de Sistemas
>
> ______________________________________________
> 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