Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Maykel-ctba

Trazer nome de professor responsável (INNER JOIN ou SELECT comum?)

Recommended Posts

Fala galera!

 

Tenho uma seguinte estrutura (resumida):

 

- Usuários (contém todos os usuários do sistema, não importa se é professor, admin ou aluno. Diferenciam-se pelo campo usuTipo)

- Professor (contem o ID do usuário, id de professor e id da instituição)

- Aluno (contém o ID do usuário, id de aluno e id de professor responsável)

 

Tenho a seguinte consulta:

SELECT pro.proId, usu.* , alu.aluId, ins.insNome
FROM sistema_professor pro, sistema_usuario usu, sistema_aluno alu, sistema_instituicao ins

WHERE usu.usuTipo =  'AL' # Tipo aluno
AND alu.proId = pro.proId # Professor responsável do aluno
AND alu.usuId = usu.usuId # Usuário do aluno
AND pro.insId = ins.insId # Cruza professor com a instituição
AND usu.usuExcluido =  'N' # Apenas usuários que não foram excluidos

Desta maneira, consigo trazer as infos do aluno.

Porém, gostaria de trazer o nome do professor responsável. Mas não consigo imaginar como...

 

Cada aluno tem um professor responsável apenas. Como posso fazer para retornar, por exemplo, o nome do professor deste aluno em um campo "novo" chamado "professorNome"?

 

---

 

Tentei o seguinte e aparentemente deu. Mas é o jeito certo?

SELECT pro.proId, usu . * , alu.aluId, ins.insNome, 
(
    SELECT usuNome
    FROM sistema_usuario
    WHERE usuId = pro.usuId
) AS professorNome # traz o nome do professor

FROM sistema_professor pro, sistema_usuario usu, sistema_aluno alu, sistema_instituicao ins
WHERE usu.usuTipo = 'AL'# Tipo aluno
AND alu.proId = pro.proId# Professor responsável do aluno
AND alu.usuId = usu.usuId# Usuário do aluno
AND pro.insId = ins.insId# Cruza professor com a instituição
AND usu.usuExcluido = 'N'# Apenas usuários que não foram excluidos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta com Inner Join... As tabelas estão relacionadas? O id professor da tabela aluno é o mesmo que o id porfessor responsavel da tabela professor?

 

Se sim, tente fazer assim:

, sistema_usuario usu, , sistema_instituicao ins

 

SELECT *
FROM sistema_aluno alu

INNER JOIN sistema_professor pro

ON alu.IDPROFESSORDATABELASISTEMA_ALUNO = pro.IDPROFESSORDATABELASISTEMA_PROFESSOR

WHERE IDPROFESSORDATABELASISTEMA_PROFESSOR = IDPROFESSOR

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara.. É melhor com INNER JOIN, desse jeito que está fazendo não funciona:

 

Tenta assim:

 

SELECT
alu.aluId IDAluno,
pro.proId IDProfessor,
pro.nome NomeProfessor,
ins.nome NomeInstituicao,
'Aluno' TipoUsuario, -- Já que colocou no WHERE o tipo, então já escreve direto
FROM
sistema_aluno alu
INNER JOIN
sistema_professor pro ON alu.proId = pro.proId
INNER JOIN
sistema_usuario usu ON usu.aluID = alu.aluID
INNER JOIN
sistema_instituicao ins ON pro.proId = ins.proId
WHERE
usu.usuTipo = 'AL' -- Tipo aluno
GROUP BY 1;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.