André,

É possível, sim.

   1. *No MySQL* >>
   http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html
   2. *No SQL-Server* >>
   http://msdn.microsoft.com/en-us/library/ms182717.aspx
   3. *No Oracle* >>
   
http://www.orafaq.com/faq/how_does_one_implement_if_then_else_logic_in_a_select_statement

Estes foram os que eu achei. É bem provável ser possível em outros SGBD
também.





2011/8/17 Marcus Cavalcanti <[email protected]>

> Dá uma pesquisada por left join e inner select.
>
> --
> Marcus Cavalcanti
> 21 9144-5068
> www.marcuscavalcanti.net/blog
>
>
> 2011/8/14 André da Silva Severino <[email protected]>
>
> > DESCULPEM O OFF NOVAMENTE :(
> >
> > Boa noite pessoal, ultimamente venho estudando mais as instruções SQL
> > e estou tentando cada vez mais otimizar meus sistemas usando alguns
> > recursos do proprio banco de dados, e venho a todos pedir uma
> > orientação em uma questão que não sei se é possível ou não, abaixo vou
> > ilustrar o meu problema:
> >
> > - Tenho 2 tabelas:
> >
> > usuario
> > Campos: id_usuario | nome_usuario | senha_usuario
> >
> > usuario_contato
> > Campos: id_contato | fk_id_usuario | descricao_contato
> >
> > Como podem ver, eu tenho uma chave estrangeira na tabela
> > usuario_contato relacionando com a tabela usuário. Até este ponto sem
> > problema, ok ?
> >
> > O x da questão vem agora, como eu faço para fazer uma consulta
> > buscando agrupando as 2 consultas sabendo que:
> > - O campo fk_id_usuario não é obrigatório.
> >
> > Teoricamente a forma da consulta seria assim:
> >
> >  SELECT u.*, c.* FROM usuario AS u
> >   JOIN usuario_contato AS c
> >    ON c.fk_id_usuario = u.id_usuario
> >  WHERE u.id_usuario = 5
> >
> >
> >
> > Mas se o usuário de id 5 não inseriu nenhuma informação de contato a
> > FK da tabela contato estará vazia e com isso a consulta não ira
> > retornar nada certo ?
> >
> >
> > Atualmente eu tenho que fazer 3 consultas para resolver isso, primeiro
> > faço uma consulta na tabela de usuario:
> >
> > SELECT * FROM usuario WHERE id_usuario = 5
> >
> >
> >
> > Depois faço uma verificação na tabela contato_usuario para ver se
> > existe algum registro pertinente ao usuário
> >
> > qtd = SELECT COUNT(*) FROM usuario_contato WHERE fk_id_usuario = 1
> > // verifico se existe os dados, então faço uma consulta para armazenar os
> > dados
> >
> > if ( qtd > 0 )
> >  contato = SELECT * FROM usuario_contato WHERE fk_id_usuario = 1
> >
> >
> >
> > Alguém poderia me ajudar ? O que eu pensei em fazer é algo parecido com
> > isso:
> >
> >  SELECT u.*, c.* FROM usuario AS u
> >
> >   IF c.fk_id_usuario != NULL faca {
> >      JOIN usuario_contato AS c
> >       ON c.fk_id_usuario = u.id_usuario
> >  }
> >
> >  WHERE u.id_usuario = 5
> >
> >
> >
> > Ps.: no contexto do meu projeto, a tabela usuario_contato só vai poder
> > armazenar 1 unico registro, ou seja, eu posso trazer ele junto com
> > join pois vai ter apenas 1 linha.
> >
> > --
> > Att,
> >
> > André da Silva Severino
> > Desenvolvedor web
> > (19) 8847.3747
> > Email: [email protected]
> > Url: http://andrewd.com.br
> >
> > _______________________________________________
> > [email protected]
> > http://www.codeigniter.com.br
> > http://mail.codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br
> >
> > ---------------------------
> > Oportunidade de negócio
> > http://www.franquiasargohost.net
> > ---------------------------
> >
> _______________________________________________
> [email protected]
> http://www.codeigniter.com.br
> http://mail.codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br
>
> ---------------------------
> Oportunidade de negócio
> http://www.franquiasargohost.net
> ---------------------------
>
_______________________________________________
[email protected]
http://www.codeigniter.com.br
http://mail.codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br

---------------------------
Oportunidade de negócio
http://www.franquiasargohost.net
---------------------------

Responder a