Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => Bases de Datos => Mensaje iniciado por: Hadess_inf en 16 Noviembre 2009, 02:31 AM

Título: Consulta SQL.
Publicado por: Hadess_inf en 16 Noviembre 2009, 02:31 AM
(http://img35.imageshack.us/img35/7159/sinttulo2ad.png)

En curso estan:

1 - Matematica
2 - Lenguaje
3 - Historia

En detalle estan

1 - 1

Como hacer que en una consulta me muestre los cursos que no estan en detalle.
Gracias.
Título: Re: Consulta SQL.
Publicado por: Novlucker en 16 Noviembre 2009, 02:38 AM
La más básica ..

Código (sql) [Seleccionar]
select *
from curso
where curso.idcurso not in (select detalle.idcurso from detalle)


Saludos
Título: Re: Consulta SQL.
Publicado por: Castg! en 16 Noviembre 2009, 20:38 PM
disculpa novlucker, me podes explicar esto :?
Código (sql) [Seleccionar]
NOT IN (SELECT detalle.idcurso FROM detalle)
Título: Re: Consulta SQL.
Publicado por: kamsky en 16 Noviembre 2009, 20:55 PM
CitarInsertar Cita
disculpa novlucker, me podes explicar esto :?
Código

NOT IN (SELECT detalle.idcurso FROM detalle)

se hace una subconsulta (consulta dentro de otra), en la que se buscan todos los id's de la tabla detalle, y con ayuda del not lo "negamos", de forma que en palabras la consulta sería algo como:

Muéstrame todos los campos de la tabla curso, teniendo en cuenta que los que me muestres no tienen que tener un id igual al que hay en la tabla detalle
Título: Re: Consulta SQL.
Publicado por: Castg! en 16 Noviembre 2009, 20:57 PM
la explicacion perfecta, ahora, que ganas con esto?
Título: Re: Consulta SQL.
Publicado por: kamsky en 16 Noviembre 2009, 21:03 PM
no se, es la consulta que pidió hadess :
CitarComo hacer que en una consulta me muestre los cursos que no estan en detalle.
, pregúntale a él :P
Título: Re: Consulta SQL.
Publicado por: Castg! en 16 Noviembre 2009, 21:32 PM
jaaj, listo gracias! un saludo y suerte!
Título: Re: Consulta SQL.
Publicado por: Novlucker en 17 Noviembre 2009, 01:25 AM
jaja ... como han dicho, en realidad la consulta es así .. buscas "X" elementos que además estén dentro de otro subgrupo, no hay muchas vueltas  :P

Saludos
Título: Re: Consulta SQL.
Publicado por: jdc en 17 Noviembre 2009, 03:00 AM
Las consultas SQL mientras más largas más entretenidas se hacen, hace poco en un examen me tocó una consulta que incluía un case xD
Título: Re: Consulta SQL.
Publicado por: Hadess_inf en 17 Noviembre 2009, 03:09 AM
Yo lo queria hacer con inner join, pero al final tuve que hacerlo de esa forma porque me aburri xD ..
Título: Re: Consulta SQL.
Publicado por: sempus en 17 Noviembre 2009, 16:23 PM
con inner no puedes hacerlo, porque inner muestra solo registros cuyos campos que estes relacionando existan en ambas tablas, todos aquellos que esten en una  pero no en otra son omitidos :P

A la consulta de Nov creo que le haria falta un GROUP BY o un DISTINCT , porque ya que es la tabla muchos entonces el id de tabla padre se repetira muchas veces, entonces, se evaluara todas esas veces que aparezca, encambio, si aparece una vez ya es obvio que ese no esta en la tabla padre, por lo tanto la consulta (segun mi logica) sera mas rapida.

nose si me explico xD

yo la haria asi

Código (sql) [Seleccionar]

SELECT *
FROM curso
WHERE idcurso NOT IN (SELECT DISTINCT idcurso FROM detalle)


salu2
Título: Re: Consulta SQL.
Publicado por: Novlucker en 17 Noviembre 2009, 17:34 PM
Lo que ocurre es asumi que la relación era de 1 a 1 y por eso no puse el DISTINCT, en relación de 1 a N es más que necesario, tal y como has puesto  :P

Saludos