Problema con SELECT en tablas relacionadas

  • Autor Autor pa3lo022
  • Fecha de inicio Fecha de inicio
P

pa3lo022

Gamma
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de 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.

Insertar CODE, HTML o 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
 
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
 
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...
 
Atrás
Arriba