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

