otro con problemas con el left join

fiveson5
17 de Mayo del 2004
pues buscando buscando he descubierto q no hay subselects y me he fijado en ciertos ejemplos pero no me va lo que oy quiero hacer. Mi intencion es la siguiente:

tengo una tabla eventos donde cada evento de un cliente se almacena, entres otros campos tengo el ID_profesores (que corresponde con el ID de otra tabla llamada profesores) hora_inicio, dia...

mi intencion es elegir aquellos profesores que no tengan eventos fijados el martes a las 17:00 por ejemplo
empece con :

select ID from profesores where ID not in (select ID_profesores
from eventos where dia = 'martes' and hora_inicio= '17:00')

pero al enterarme q no iban los subselects intenté esta otra

select ID from profesores p LEFT JOIN eventos e ON p.ID=e.ID_profesores where e.ID_profesores IS NULL and e.hora_inicio='17:00' (le he quitado condiciones)

el problema es que no me devuelve resultados, osea, que la consulta es correcta pero no me devuelve resultados. Yo espero profesores que NO tengan ocupada esa fecha, y en la base de datos, haberlos haylos, pero no se por que narices no me los muestra.

Está mal expresada la orden sql???

fiveson5
17 de Mayo del 2004
hola, alguien que me pueda ayudar???

Hector Murcia
17 de Mayo del 2004
Correcto!! está mal expresada la orden. Debe ser asi:

select ID_profesores from eventos where hora_inicio<>'17:00' union
select ID from profesores p LEFT JOIN eventos e ON
p.ID=e.ID_profesores where e.ID_profesores IS NULL

fiveson5
17 de Mayo del 2004
Hola he probado tu orden y si me devuelve valores pero me devuelve aquellos valores que son distintos a las 17:00, el problema radica en que si el profesor con ID 6 tiene 3 eventos y uno es a las 17 pero los otros 2 no, ese profesor tambien me lo selecciona... Supongo que será facil de evitar. Yo probando y probando di con esto que al parecer y a falta de un testeo mas grande me da justo lo que quiero, pero me gustaria que le echaseis un vistazo.


select ID FROM profesores LEFT JOIN eventos ON (eventos.ID_profesores=profesores.ID and eventos.ID_dia='4' and eventos.hora_inicio='10:00') or (eventos.ID_profesores=profesores.ID and eventos.ID_dia='2' and eventos.hora_inicio='15:00')
WHERE eventos.ID_profesores IS NULL


con esto me saca aquellos que no tienen eventos en esos dias y esas horas. ¿Está bien??