[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