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 ---------------------------

