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

Responder a