Problema com SELECT em tabelas relacionadas

  • Autor Autor pa3lo022
  • Data de início Data de início
Tradução em andamento: em alguns minutos este tópico estará em português. Por enquanto, o conteúdo está no original em espanhol. Ver original
P

pa3lo022

Gamma
Usuário com poucas negociações! Use sempre o saldo do ForoBeta!
Hola a todos, estoy tratando de hacer un select de varias tablas, me esta trayendo los datos correctos, el problema es que tengo una tabla Salas que esta relacionada con otras dos, Alumnos y docentes, pero si estas 2 ultimas no tienen datos, no me trae las salas vacias, no se si me explico. Les paso la query que estoy usando.

Inserir CODE, HTML ou PHP:
SELECT s.Id_Sala, d.Id_Sala, s.SNombre, d.DNombre, a.Id_Sala, COUNT(a.Id_Sala) as Cantidad
FROM salas s, docentes d, alumnos a
Where s.Id_Escuela = '1'
AND d.Id_Sala = s.Id_Sala
AND s.Id_Sala = a.Id_Sala
group by a.Id_Sala;

Aca me trae 2 registros correcto, el caso es que tengo 2 salas que no tienen ni alumnos ni docentes, pero esas no me las trae. Alguien me puede ayudar por favor

muchas gracias de antemano
 
Foi útil? Participe da conversa

Com sua conta grátis você pode responder, mandar mensagem privada ao autor e comprar com Saldo retido: o pagamento é liberado quando você recebe o combinado.

Leva 30 segundos · você volta a este tópico ao terminar
usa inner join, left join o right join dependiendo de cómo ordenes tus tablas, en las junturas puedes especificar qué deseas agrupar y ponerle condicionales en adición
 
Es correcto lo que dice el usuario [MENTION=171682]goldfish[/MENTION], debes implementar LEFT JOIN. Veo que en el Query estas uniendo las tablas en el mismo FROM (Mal Practica), investiga un poquito sobre los JOIN (INNER, LEFT, RIGHT).
 
cambia el group by a.Id_Sala por group by s.Id_Sala
 
cambia el group by a.Id_Sala por group by s.Id_Sala

Eso tambien lo probé, pero me sigue trayendo los mismos datos. Me esta volviendo loco esta query
 
Buenas,

A tu consulta como dicen más arriba debes agregarle un left o rigth porque lo tienes mezclado en el where, pero como no tienes los join de forma explicita y si fuera oracle debería quedar de la siguiente forma:

SELECT s.Id_Sala, d.Id_Sala, s.SNombre, d.DNombre, a.Id_Sala, COUNT(a.Id_Sala) as Cantidad
FROM salas s, docentes d, alumnos a
Where s.Id_Escuela = '1'
AND d.Id_Sala = s.Id_Sala (+)
AND s.Id_Sala(+) = a.Id_Sala
group by a.Id_Sala;

sino

SELECT s.Id_Sala, d.Id_Sala, s.SNombre, d.DNombre, a.Id_Sala, COUNT(a.Id_Sala) as Cantidad
FROM salas s,
left join docentes d on s.Id_Sala = d.Id_Sala
left join alumnos a on s.Id_Sala = a.Id_Sala
Where s.Id_Escuela = '1'
group by a.Id_Sala;

Ojalá te sirva saludos!
 
Si hay dos salas que no tienen registros cómo esperas que la cláusula del WHERE te los pille? No pueden igualar sus IDs con ningún otro registro porque en ellas no hay nada, según dices...
 

Tópicos similares

Voltar
Topo