[Resolvido] Tem como usar ' IF ' dentro de uma consulta S
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.
Discussão (6)
Carregando comentários...