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

Problema con selects anidados

Estas en el tema de Problema con selects anidados en el foro de Bases de Datos General en Foros del Web. Os pongo en situación: Tengo una tabla llamada ClienteAuto: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original CREATE TABLE ClienteAuto ( Fk_idCliente CHAR ( 9 ) NOT ...
  #1 (permalink)  
Antiguo 28/07/2015, 17:35
 
Fecha de Ingreso: agosto-2014
Mensajes: 30
Antigüedad: 9 años, 8 meses
Puntos: 0
Problema con selects anidados

Os pongo en situación:

Tengo una tabla llamada ClienteAuto:

Código SQL:
Ver original
  1. CREATE TABLE ClienteAuto
  2. (Fk_idCliente CHAR(9) NOT NULL,
  3. Fk_matricula_auto VARCHAR(15) NOT NULL,
  4. fecha_inicio_alquiler DATE NOT NULL,
  5. fecha_final_alquiler DATE NOT NULL,
  6. CONSTRAINT fk_idCliente FOREIGN KEY(Fk_idCliente) REFERENCES Clientes (idCliente),
  7. CONSTRAINT fk_matricula_auto FOREIGN KEY(Fk_matricula_auto) REFERENCES Autos (matricula_auto),
  8. PRIMARY KEY (Fk_idCliente, Fk_matricula_auto)
  9. )

He insertado varios registros en la misma y ahora mi intención es la de hacer una consulta en la que yo le doy una serie de matriculaS, una fecha_inicio_alquiler y una fecha_final_alquiler; y la consulta me devuelva la o las matriculas que NO cumplen con dichos requisitos.

A ver si me explico... la intención que hay detrás de todo esto es que yo le de una o unas matriculas y las fechas y la consulta me responda cuales de esas matriculas (autos) NO están alquilados en el periodo de tiempo que le propongo a través de las fechas.

Esta es la consulta que tengo hecha:
Código SQL:
Ver original
  1. SELECT `Fk_matricula_auto`
  2. FROM `clienteauto`
  3. WHERE `Fk_matricula_auto` = 'abb1414' AND `Fk_matricula_auto` NOT IN
  4. (SELECT `Fk_matricula_auto`
  5. FROM `clienteauto`
  6. WHERE `Fk_matricula_auto` = 'abb1414'  AND fecha_inicio_alquiler > '2006-06-05' AND `fecha_final_alquiler` <= '2006-06-07')

Esa consulta reconoce que en ese periodo de tiempo:
fecha_inicio_alquiler > '2006-06-05' and `fecha_final_alquiler` <= '2006-06-07'
el auto con matricula 'abb1414' está alquilado y por lo tanto no me devuelve la matricula (al menos así lo entiendo yo) pero quiero poder hacerlo no con una sino con varias matriculas y si alguno de esos autos NO está alquilado, me devuelva dicha matricula. Gracias.

Última edición por Lentorro; 29/07/2015 a las 04:22
  #2 (permalink)  
Antiguo 29/07/2015, 05:51
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: Problema con selects anidados

En realidad no es una consulta tan dificil de pensar, pero es larga de escribir cuando se trata de eventos que ocurren dentro de un rango.
Lo que suelo aconsejar es NUNCA tratar de resolver una consulta de ese tipo de condiciones de un solo saque, solo conseguirás hacer consultas complicadas. Es mejor hacerlo parte a parte y luego integrarlas.

Empecemos así: ¿Qué condiciones debe cumplir un vehiculo para estar disponible en un rago de tiempo determinado?
- No debe estar alquilado en el mismo período.
- No debe haber iniciado su alquiler antes del período y terminar después (tiempos solapados).
- No debe haber iniciado y terminado su alquiler entremedio de las fechas que se buscan (tiempo solapado).
- No debe iniciar o terminar entremedio de las fechas buscadas (tiempos cruzados).

¿Cuatro condiciones? No, realmente, sólo tres grupos:
Código SQL:
Ver original
  1. SELECT `Fk_matricula_auto`
  2. FROM `clienteauto`
  3. WHERE
  4.     fecha_inicio_alquiler NOT BETWEEN '2006-06-05' AND '2006-06-07'
  5.     OR fecha_final_alquiler NOT BETWEEN '2006-06-05' AND '2006-06-07'
  6.     OR NOT (fecha_inicio_alquiler < '2006-06-05' AND  fecha_final_alquiler > '2006-06-07')
__________________
¿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/07/2015, 13:39
 
Fecha de Ingreso: agosto-2014
Mensajes: 30
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: Problema con selects anidados

Tu Select no me da ningún error, pero tampoco da el resultado que deseo. Seguramente me haya explicado mal, vuelvo a intentarlo. Esta vez seré más explícito.

Mi tabla:

Código SQL:
Ver original
  1. CREATE TABLE ClienteAuto
  2. (Fk_idCliente CHAR(9) NOT NULL,
  3. Fk_matricula_auto VARCHAR(15) NOT NULL,
  4. fecha_inicio_alquiler DATE NOT NULL,
  5. fecha_final_alquiler DATE NOT NULL,
  6. CONSTRAINT fk_idCliente FOREIGN KEY(Fk_idCliente) REFERENCES Clientes (idCliente),
  7. CONSTRAINT fk_matricula_auto FOREIGN KEY(Fk_matricula_auto) REFERENCES Autos (matricula_auto),
  8. PRIMARY KEY (Fk_idCliente, Fk_matricula_auto)
  9. )
Mis inserciones:
Código SQL:
Ver original
  1. INSERT INTO clienteauto (`Fk_idCliente`,`Fk_matricula_auto`,`fecha_inicio_alquiler`,`fecha_final_alquiler`) VALUES ('123456789', 'abb1414', '2006-06-06','2006-06-07');
  2.  
  3. INSERT INTO clienteauto (`Fk_idCliente`,`Fk_matricula_auto`,`fecha_inicio_alquiler`,`fecha_final_alquiler`) VALUES ('123456789', '48731cda', '2006-06-06','2006-06-07');
  4.  
  5. INSERT INTO clienteauto (`Fk_idCliente`,`Fk_matricula_auto`,`fecha_inicio_alquiler`,`fecha_final_alquiler`) VALUES ('123456789', 'abb141417', '2006-06-06','2006-06-07');
  6.  
  7. INSERT INTO clienteauto (`Fk_idCliente`,`Fk_matricula_auto`,`fecha_inicio_alquiler`,`fecha_final_alquiler`) VALUES ('123456789', 'abb1865', '2006-06-04','2006-06-05');
La consulta que quiero hacer:

Quiero dar las cuatro matrículas que ves en los inserts (no todas, porque la tabla podría tener "x" número, sino exactamente esas cuatro) . Y que de ellas, me devuelva SOLO aquella, que no estén alquiladas entre los días '2006-06-06' y '2006-06-07'. Es decir, en este caso la consulta que quiero hacer debería devolverme solamente la matricula 'abb1865' (el último insert).

Cuando copio y pego tu consulta... me devuelve las cuatro matriculas.

Última edición por gnzsoloyo; 29/07/2015 a las 14:31
  #4 (permalink)  
Antiguo 29/07/2015, 13:50
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Problema con selects anidados

Código SQL:
Ver original
  1. SELECT * FROM =clienteauto WHERE fecha_inicio_alquiler<>'2006-06-06' AND fecha_final_alquiler <>'2006-06-07'

u otro aproach



Código SQL:
Ver original
  1. SELECT t1.* FROM clienteauto AS t1
  2. LEFT JOIN (SELECT Fk_idCliente, Fk_matricula_auto FROM #clienteauto WHERE fecha_inicio_alquiler>='2006-06-06' AND fecha_final_alquiler <='2006-06-07') AS t2 ON (t1.Fk_idCliente=t2.Fk_idCliente AND t1.Fk_matricula_auto=t2.Fk_matricula_auto)
  3. WHERE t2.Fk_matricula_auto IS NULL
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Última edición por Libras; 29/07/2015 a las 13:58
  #5 (permalink)  
Antiguo 29/07/2015, 14:34
 
Fecha de Ingreso: agosto-2014
Mensajes: 30
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: Problema con selects anidados

La consulta:

Código SQL:
Ver original
  1. SELECT t1.* FROM clienteauto AS t1
  2. LEFT JOIN (SELECT Fk_idCliente, Fk_matricula_auto FROM #clienteauto WHERE fecha_inicio_alquiler>='2006-06-06' AND fecha_final_alquiler <='2006-06-07') AS t2 ON (t1.Fk_idCliente=t2.Fk_idCliente AND t1.Fk_matricula_auto=t2.Fk_matricula_auto)
  3. WHERE t2.Fk_matricula_auto IS NULL

Da error.

WHERE t2.Fk_matricula_auto IS NULL. Esa es la parte en la que me avisa del error de sintaxis.

Y una cosa más... quiero darle las matriculas que antes dije. No me debe sacar cualquier matricula que no esté alquilada en esas fechas, sino las que no estén alquiladas de entre aquellas que yo les paso. Tengo una duda con el cómo pasarle esas "x" matriculas... no me sirve el asterisco.

La primera consulta que escribiste tampoco me sirve. Primero porque no le das las matrículas y en segundo porque si yo simplemente le digo que me entregue los registros cuya fecha_inicio_alquiler y fecha_final_alquiler... sean distintas a lo que le pido... no me servirá para saber si alguno de los autos (matriculas) que le doy... no está alquilada en el espacio de tiempo que le propongo. Que a fin de cuentas es lo que quiero.

P.D. ¿Por qué la web siempre me da problemas para enviar mensajes? Me lleva a una página en la que tengo que introducir un código... a veces me deja los mensajes a mitad... bueno.

Última edición por gnzsoloyo; 29/07/2015 a las 14:39
  #6 (permalink)  
Antiguo 29/07/2015, 14:40
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: Problema con selects anidados

Usa los highlight para poner código, por favor.
Para eso está ese combo en la ventana de edición.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 29/07/2015, 14:43
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Problema con selects anidados

Primero, no revisaste que hay un # entre los nombres de tablas, lo que aqui se hace es darte una idea de como hacer el query no quiere decir que te va a funcionar con copiar y pegar, mucho ojo en eso:

Código SQL:
Ver original
  1. SELECT t1.* FROM clienteauto AS t1
  2. LEFT JOIN (SELECT Fk_idCliente, Fk_matricula_auto FROM clienteauto WHERE fecha_inicio_alquiler>='2006-06-06' AND fecha_final_alquiler <='2006-06-07') AS t2 ON (t1.Fk_idCliente=t2.Fk_idCliente AND t1.Fk_matricula_auto=t2.Fk_matricula_auto)
  3. WHERE t2.Fk_matricula_auto IS NULL

ahora lo que pides se puede poner dentro del where con un IN algo como esto

Código SQL:
Ver original
  1. SELECT * FROM clienteauto AS t1 WHERE Fk_matricula_auto IN ('matricula1','matricula2','matricula3')

Pon un poquito de tu parte, porque dices que la primer consulta no te sirve porque no le das las matriculas? o sea te estoy diciendo como obtener el resultado de los datos que diste de ejemplo, si te fijas con esos datos funciona, tu pon algo de tu parte y piensa como hacer lo que hace falta.......
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #8 (permalink)  
Antiguo 29/07/2015, 18:22
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: Problema con selects anidados

Cita:
Cuando copio y pego tu consulta... me devuelve las cuatro matriculas.
¿O sea que estás haciendo Copy+Paste?
¿No analizas nada?
¿Lo quieres todo resuelto y sin esfuerzo?

Ok, entonces te paso esto:

Código MySQL:
Ver original
  1. mysql> DROP TABLE IF EXISTS ClienteAuto;
  2. Query OK, 0 rows affected (0.06 sec)
  3.  
  4. mysql> CREATE TABLE ClienteAuto
  5.     -> (Fk_idCliente CHAR(9) NOT NULL,
  6.     -> Fk_matricula_auto VARCHAR(15) NOT NULL,
  7.     -> fecha_inicio_alquiler DATE NOT NULL,
  8.     -> fecha_final_alquiler DATE NOT NULL,
  9.     -> PRIMARY KEY (Fk_idCliente, Fk_matricula_auto)
  10.     -> );
  11. Query OK, 0 rows affected (0.00 sec)
  12.  
  13. mysql>
  14. mysql> INSERT INTO clienteauto (`Fk_idCliente`,`Fk_matricula_auto`,`fecha_inicio_alquiler`,`fecha_final_alquiler`)
  15.     -> VALUES ('123456789', 'abb1414', '2006-06-06','2006-06-07');
  16. Query OK, 1 row affected (0.02 sec)
  17.  
  18. mysql>
  19. mysql> INSERT INTO clienteauto (`Fk_idCliente`,`Fk_matricula_auto`,`fecha_inicio_alquiler`,`fecha_final_alquiler`)
  20.     -> VALUES ('123456789', '48731cda', '2006-06-06','2006-06-07');
  21. Query OK, 1 row affected (0.00 sec)
  22.  
  23. mysql>
  24. mysql> INSERT INTO clienteauto (`Fk_idCliente`,`Fk_matricula_auto`,`fecha_inicio_alquiler`,`fecha_final_alquiler`)
  25.     -> VALUES ('123456789', 'abb141417', '2006-06-06','2006-06-07');
  26. Query OK, 1 row affected (0.00 sec)
  27.  
  28. mysql>
  29. mysql> INSERT INTO clienteauto (`Fk_idCliente`,`Fk_matricula_auto`,`fecha_inicio_alquiler`,`fecha_final_alquiler`)
  30.     -> VALUES ('123456789', 'abb1865', '2006-06-04','2006-06-05');
  31. Query OK, 1 row affected (0.00 sec)

Bueno, veamos lo que hay:

Código MySQL:
Ver original
  1. mysql> SELECT `Fk_matricula_auto`, fecha_inicio_alquiler, fecha_final_alquiler
  2.     -> FROM `clienteauto` ;
  3. +-------------------+-----------------------+----------------------+
  4. | Fk_matricula_auto | fecha_inicio_alquiler | fecha_final_alquiler |
  5. +-------------------+-----------------------+----------------------+
  6. | 48731cda          | 2006-06-06            | 2006-06-07           |
  7. | abb1414           | 2006-06-06            | 2006-06-07           |
  8. | abb141417         | 2006-06-06            | 2006-06-07           |
  9. | abb1865           | 2006-06-04            | 2006-06-05           |
  10. +-------------------+-----------------------+----------------------+
  11. 4 rows in set (0.00 sec)

Ahora bien, corrigiendo un poco lo que te puse, tenemos:
Código MySQL:
Ver original
  1. mysql> SELECT `Fk_matricula_auto`, fecha_inicio_alquiler, fecha_final_alquiler
  2.     -> FROM `clienteauto`
  3.     -> WHERE
  4.     ->     (fecha_inicio_alquiler NOT BETWEEN '2006-06-05' AND '2006-06-07')
  5.     ->     AND (fecha_final_alquiler NOT BETWEEN '2006-06-05' AND '2006-06-07')
  6.     ->     AND (NOT fecha_inicio_alquiler < '2006-06-05' AND  fecha_final_alquiler > '2006-06-07')
  7.     ->  and Fk_matricula_auto = 'abb1414';
  8. Empty set (0.00 sec)
No devuelve datos, lo cual sería correcto porque la matricula "abb1414" está alquilada para la fecha indicada.
Si en cambio buscamos una fecha anterior o posterior:
Código MySQL:
Ver original
  1. mysql> SELECT `Fk_matricula_auto`, fecha_inicio_alquiler, fecha_final_alquiler
  2.     -> FROM `clienteauto`
  3.     -> WHERE
  4.     ->     (fecha_inicio_alquiler NOT BETWEEN '2006-06-08' AND '2006-06-09')
  5.     ->     AND (fecha_final_alquiler NOT BETWEEN '2006-06-08' AND '2006-06-09')
  6.     ->     AND NOT (fecha_inicio_alquiler < '2006-06-08'  AND  fecha_final_alquiler > '2006-06-09')
  7.     ->  and Fk_matricula_auto = 'abb1414';
  8. +-------------------+-----------------------+----------------------+
  9. | Fk_matricula_auto | fecha_inicio_alquiler | fecha_final_alquiler |
  10. +-------------------+-----------------------+----------------------+
  11. | abb1414           | 2006-06-06            | 2006-06-07           |
  12. +-------------------+-----------------------+----------------------+
  13. 1 row in set (0.00 sec)
Lo cual es correcto porque la única fecha de alquiler de esa matricula termina el 7/6/2006, antes del periodo indicado.
Y si no pongo la matricula, debería devolver todos:
Código MySQL:
Ver original
  1. mysql> SELECT `Fk_matricula_auto`, fecha_inicio_alquiler, fecha_final_alquiler
  2.     -> FROM `clienteauto`
  3.     -> WHERE
  4.     ->     (fecha_inicio_alquiler NOT BETWEEN '2006-06-08' AND '2006-06-09')
  5.     ->     AND (fecha_final_alquiler NOT BETWEEN '2006-06-08' AND '2006-06-09')
  6.     ->     AND NOT (fecha_inicio_alquiler < '2006-06-08'  AND  fecha_final_alquiler > '2006-06-09')
  7.     -> ;
  8. +-------------------+-----------------------+----------------------+
  9. | Fk_matricula_auto | fecha_inicio_alquiler | fecha_final_alquiler |
  10. +-------------------+-----------------------+----------------------+
  11. | 48731cda          | 2006-06-06            | 2006-06-07           |
  12. | abb1414           | 2006-06-06            | 2006-06-07           |
  13. | abb141417         | 2006-06-06            | 2006-06-07           |
  14. | abb1865           | 2006-06-04            | 2006-06-05           |
  15. +-------------------+-----------------------+----------------------+
  16. 4 rows in set (0.00 sec)
Si pongo que comience antes de la menor de las fechas, no devolverá nada:
Código MySQL:
Ver original
  1. mysql> SELECT `Fk_matricula_auto`, fecha_inicio_alquiler, fecha_final_alquiler
  2.     -> FROM `clienteauto`
  3.     -> WHERE
  4.     ->     (fecha_inicio_alquiler NOT BETWEEN '2006-06-03' AND '2006-06-09')
  5.     ->     AND (fecha_final_alquiler NOT BETWEEN '2006-06-03' AND '2006-06-09')
  6.     ->     AND NOT (fecha_inicio_alquiler < '2006-06-03'  AND  fecha_final_alquiler > '2006-06-09');
  7. Empty set (0.00 sec)
Y si, finalmente, pongo como fecha una intermedia en la del "abb1865", devolverá los otros tres:
Código MySQL:
Ver original
  1. mysql> SELECT `Fk_matricula_auto`, fecha_inicio_alquiler, fecha_final_alquiler
  2.     -> FROM `clienteauto`
  3.     -> WHERE
  4.     ->     (fecha_inicio_alquiler NOT BETWEEN '2006-06-03' AND '2006-06-04')
  5.     ->     AND (fecha_final_alquiler NOT BETWEEN '2006-06-03' AND '2006-06-04')
  6.     ->     AND NOT (fecha_inicio_alquiler < '2006-06-03'  AND  fecha_final_alquiler > '2006-06-04');
  7. +-------------------+-----------------------+----------------------+
  8. | Fk_matricula_auto | fecha_inicio_alquiler | fecha_final_alquiler |
  9. +-------------------+-----------------------+----------------------+
  10. | 48731cda          | 2006-06-06            | 2006-06-07           |
  11. | abb1414           | 2006-06-06            | 2006-06-07           |
  12. | abb141417         | 2006-06-06            | 2006-06-07           |
  13. +-------------------+-----------------------+----------------------+
  14. 3 rows in set (0.00 sec)
En resumen, la logica que yo expliqué es correcta, aunque había un par de detalles mal puestos en el ejemplo, que hubieses podido descubrir con solo ponerte a analizar lo que posteé.
Espero sirva todo esto.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 30/07/2015, 15:23
 
Fecha de Ingreso: agosto-2014
Mensajes: 30
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: Problema con selects anidados

Pero vamos a ver, compañero Libras. Si pregunto es porque estoy trabajando en ese "Query" y tras mucho intentarlo no soy capaz de hacerlo funcionar. Cuando me das la solución... yo puedo ir quitando y cambiando cosas de la consulta, y viendo realmente cómo funciona y por qué. Además, en mis preguntas no suelo poner exactamente lo que trato de hacer, sino algo más general que me sirva para aprender. Por ejemplo, esta consulta en la que he estado trabajando, venía en un primer momento con la intención de conocer si alguno de los autos de una determinada (marca, modelo) se encontraba sin alquilar en una fecha determinada. Es MUY difícil aprender base de datos por uno mismo... Para mí, más difícil que html, css, php e incluso Java... y realmente hago un gran esfuerzo. El problema con bases de datos es que aprendo clausulas y funciones, pero luego me encuentro perdido al tratar de usar esos conocimientos para hallar lo que quiero. Si me dices algo como: «ahora lo que pides se puede poner dentro del where con un IN algo como esto»

Código SQL:

Código SQL:
Ver original
  1. SELECT * FROM clienteauto AS t1 WHERE Fk_matricula_auto IN ('matricula1','matricula2','matricula3')

Me dejas en las mismas, porque el problema es que no sé unir esta sentencia... a la que me dabas anteriormente.

@Soloyo

Lógicamente, lo que hago es copiar y pegar. A ver si, a partir de ahí y modificándola poco a poco, puedo entender la respuesta. La realidad es que con solo verla no me es suficiente para entenderlas porque tengo pocos conocimientos en la materia. Al igual que no me hubiera sido posible descubrir como debía ser la consulta analizando tu penúltimo post.

Código Mysql:

Código MySQL:
Ver original
  1. mysql> SELECT `Fk_matricula_auto`, fecha_inicio_alquiler, fecha_final_alquiler
  2.     -> FROM `clienteauto`
  3.     -> WHERE
  4.     ->     (fecha_inicio_alquiler NOT BETWEEN '2006-06-03' AND '2006-06-04')
  5.     ->     AND (fecha_final_alquiler NOT BETWEEN '2006-06-03' AND '2006-06-04')
  6.     ->     AND NOT (fecha_inicio_alquiler < '2006-06-03'  AND  fecha_final_alquiler > '2006-06-04');

Código Mysql:

Código MySQL:
Ver original
  1. mysql> SELECT `Fk_matricula_auto`, fecha_inicio_alquiler, fecha_final_alquiler
  2.     -> FROM `clienteauto`
  3.     -> WHERE
  4.     ->     (fecha_inicio_alquiler NOT BETWEEN '2006-06-08' AND '2006-06-09')
  5.     ->     AND (fecha_final_alquiler NOT BETWEEN '2006-06-08' AND '2006-06-09')
  6.     ->     AND NOT (fecha_inicio_alquiler < '2006-06-08'  AND  fecha_final_alquiler > '2006-06-09')
  7.     ->  and Fk_matricula_auto = 'abb1414';

Esas dos consultas eran lo que yo buscaba. De ellas pude sacar esta otra, la cual me permite saber si alguno de los autos que le paso a través de sus matrículas... no está alquilado a fecha de hoy.

Código Mysql:

Código MySQL:
Ver original
  1. SELECT `Fk_matricula_auto` FROM clienteauto where `Fk_matricula_auto` not in (SELECT `Fk_matricula_auto`
  2. FROM `clienteauto`
  3. WHERE (fecha_inicio_alquiler <= '2015-07-30'  AND  fecha_final_alquiler >='2015-07-30')
  4. AND (Fk_matricula_auto = 'abb141417' or Fk_matricula_auto = 'abb1414' or Fk_matricula_auto = '48731cda' or Fk_matricula_auto = 'abb1865'));

Cómo ves, no solo copio y pego, trato de entender cómo y por qué funciona.

Gracias a ambos por la ayuda.

Etiquetas: anidados, null, select, selects, tabla
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 10:11.