Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Pregunta simple

Estas en el tema de Pregunta simple en el foro de Bases de Datos General en Foros del Web. Tengo dos tablas(Video,Renta) y necesito una consulta que ya intente de mil maneras y no soy capaz de llegar a la correcta, yo paso dos ...
  #1 (permalink)  
Antiguo 28/08/2009, 11:22
 
Fecha de Ingreso: agosto-2009
Mensajes: 16
Antigüedad: 14 años, 8 meses
Puntos: 0
Pregunta simple

Tengo dos tablas(Video,Renta) y necesito una consulta que ya intente de mil maneras y no soy capaz de llegar a la correcta, yo paso dos fechas a la consulta una de Inicio y otra de Fin el caso que mi consulta seria: Seleccionar aquellos identificadores de video que están en la tabla Renta(alquilados) por esas fechas, que luego fusionando con otra consulta con la tabla Video saldría la solución que espero, lo que tengo es esto:
[MYSQL]
q2=SELECT `idVideo` FROM `Renta` WHERE Fecha_Inicio >='Inicio' AND Fecha_Fin <= Fin
SELECT `idVideo`, `Nombre` FROM `Video` WHERE idVideo NOT IN(q2);
[/MYSQL]
Mi problema es el q2, y funciona bien solo en los casos que exista en la tabla Renta un vídeo que coincida en Fecha de Inicio y Fin, yo necesito también los que estén dentro de esas fechas ya que si cambio la fecha de inicio o la de fin en la consulta ya me sale un resultado erróneo, espero haberme explicado bien, queda demás decir que se nota que novatillo en esto, desde ya muchas gracias a todos,saludos,
  #2 (permalink)  
Antiguo 28/08/2009, 12:47
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Pregunta simple

Esto te devolvería la lista de videos alquilados entre las fechas ingresadas, y sólo los qmue se alquilaron:
Código sql:
Ver original
  1. SELECT
  2.   `idVideo`,
  3.   `Nombre`
  4. FROM `Video` INNER JOIN `Renta` USING(`idVideo`)
  5. WHERE
  6.   (`Fecha_Inicio`BETWEEN Inicio AND Fin);

Una solución así, devolvería sólo los que no se alquilaron:
Código sql:
Ver original
  1. SELECT
  2.   v.`idVideo`,
  3.   v.`Nombre`
  4. FROM `Video` V LEFT JOIN `Renta` R USING(`idVideo`)
  5. WHERE
  6.   (`Fecha_Inicio`BETWEEN Inicio AND Fin) AND `IdVideo` IS NULL;

Esto devolverá sólo los que se alquilaron y devolvieron entre esas fechas:
Código sql:
Ver original
  1. SELECT
  2.   `idVideo`,
  3.   `Nombre`
  4. FROM `Video` INNER JOIN `Renta` USING(`idVideo`)
  5. WHERE
  6.   (`Fecha_Inicio`BETWEEN Inicio AND Fin) AND
  7.   (`Fecha_fIN`BETWEEN Inicio AND Fin);

Tu dirás exactamente qué es lo que quieres obtener.

Como tip, recuerda que el WHERE no es optimizable por el parser de MySQL, por lo que es mejor resolver estas consultas por medio de JOINs.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 29/08/2009, 10:26
 
Fecha de Ingreso: agosto-2009
Mensajes: 16
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Pregunta simple

Muchas gracias gnzsoloyo por tu ayuda me has solucionado el problema, ya tengo lo que buscaba es la tercera consulta, solo que haciendo un pequeño matiz funciona con OR no con AND pero es una tontería ya que a la primera vez que cambie eso ya salio lo que debia salir, asi que gracias por todo de vuelta. saludos! doy por terminado el tema.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:38.