eriksonsr 0 Denunciar post Postado Abril 28, 2014 Boa tarde! Será que alguém poderia me ajudar com a seguinte dificuldade, eu 5 tabelas: Tabela voluntarios, composta pelos campos id_voluntario(chave primária), nome, sobrenome; Tabela habilidades, composta pelos campos id_habilidade(chave primária), nome; Tabela voluntarios_habilidades, composta pelos campos id_hab_voluntarios(chave primária), voluntario_id(fk para a pk da tabela voluntarios) e habilidades_id(fk para a pk da tabela habilidades); Tabela treinamentos, composta pelos campos id_treinamento(chave primária), nome; Tabela voluntarios_treinamentos composta peloas campos id_trein_realizado(chave primária), voluntario_id(fk para a pk da tabela voluntarios) e treinamentos_id(fk para a pk da tabela treinamentos); Eu vou precisar criar filtros como voluntários que tenham x, y, z habilidades e voluntários que tenham a, b, c treinamentos. Tentei criar uma view usando INNER JOIN conforme consulta abaixo: SELECT voluntarios.id_voluntario, voluntarios.nome, habilidades_voluntario.`habilidades_id`,habilidades.`nome` AS 'habilidade_nome', treinamentos_realizados.`treinamentos_id`, treinamentos.`nome` AS 'treinamento_nome'FROM `voluntarios`INNER JOIN habilidades_voluntario ON voluntarios.`id_voluntario`=habilidades_voluntario.`voluntario_id`INNER JOIN habilidades ON habilidades_voluntario.`habilidades_id`=habilidades.`id_habilidade`INNER JOIN treinamentos_realizados ON voluntarios.`id_voluntario`=treinamentos_realizados.`voluntario_id`INNER JOIN treinamentos ON treinamentos_realizados.`treinamentos_id`=treinamentos.`id_treinamento`;Porém está consulta só está junto a tabelas se o voluntário tiver uma habilidade e um treinamento, se tiver uma habilidade e nenhum treinamento e vice versa, não está sendo incluso no join. Esta está sendo a minha dificuldade. Será que alguém sabe o que estou fazendo de errado ou uma mneira melhor de se fazer isto? Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Abril 28, 2014 Use outer join, como left ou rigth. Compartilhar este post Link para o post Compartilhar em outros sites
eriksonsr 0 Denunciar post Postado Abril 28, 2014 Eu tentei usar o left e o right join, mas ainda sim não consegui, isto resolveu parte do problema. Ao passo que com INNER JOIN só estava sendo incluso voluntários que tenham uma habilidade e um treinamento, com o left join estava pegando voluntarios que tivessem pelo menos uma habilidade, podendo ter ou não um treinamento. No meu caso eu preciso exibir os voluntários mesmo que eles não tenham nenhuma habilidade e nenhum treinamento. Compartilhar este post Link para o post Compartilhar em outros sites
lokaodomau 61 Denunciar post Postado Abril 28, 2014 Substitui todos os INNER JOIN por LEFT JOIN, fazendo isso, mesmo que o voluntário não possua nenhuma habilidade ou treinamento, a tabela voluntários retornará por completo, mas os campos das tabelas relacionadas retornarão NULL caso não encontre o relacionamento entre as tabelas, ou retornará o valor correspondente. Espero que entendam minha explicação... Compartilhar este post Link para o post Compartilhar em outros sites