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 originalQuery OK, 0 rows affected (0.06 sec)
-> );
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql
> INSERT INTO clienteauto
(`Fk_idCliente`,`Fk_matricula_auto`,`fecha_inicio_alquiler`,`fecha_final_alquiler`) -> VALUES ('123456789', 'abb1414', '2006-06-06','2006-06-07'); Query OK, 1 row affected (0.02 sec)
mysql>
mysql
> INSERT INTO clienteauto
(`Fk_idCliente`,`Fk_matricula_auto`,`fecha_inicio_alquiler`,`fecha_final_alquiler`) -> VALUES ('123456789', '48731cda', '2006-06-06','2006-06-07'); Query OK, 1 row affected (0.00 sec)
mysql>
mysql
> INSERT INTO clienteauto
(`Fk_idCliente`,`Fk_matricula_auto`,`fecha_inicio_alquiler`,`fecha_final_alquiler`) -> VALUES ('123456789', 'abb141417', '2006-06-06','2006-06-07'); Query OK, 1 row affected (0.00 sec)
mysql>
mysql
> INSERT INTO clienteauto
(`Fk_idCliente`,`Fk_matricula_auto`,`fecha_inicio_alquiler`,`fecha_final_alquiler`) -> VALUES ('123456789', 'abb1865', '2006-06-04','2006-06-05'); Query OK, 1 row affected (0.00 sec)
Bueno, veamos lo que hay:
Código MySQL:
Ver originalmysql
> SELECT `Fk_matricula_auto`, fecha_inicio_alquiler
, fecha_final_alquiler
+-------------------+-----------------------+----------------------+
| Fk_matricula_auto | fecha_inicio_alquiler | fecha_final_alquiler |
+-------------------+-----------------------+----------------------+
| 48731cda | 2006-06-06 | 2006-06-07 |
| abb1414 | 2006-06-06 | 2006-06-07 |
| abb141417 | 2006-06-06 | 2006-06-07 |
| abb1865 | 2006-06-04 | 2006-06-05 |
+-------------------+-----------------------+----------------------+
Ahora bien, corrigiendo un poco lo que te puse, tenemos:
Código MySQL:
Ver originalmysql
> SELECT `Fk_matricula_auto`, fecha_inicio_alquiler
, fecha_final_alquiler
-> (fecha_inicio_alquiler
NOT BETWEEN '2006-06-05' AND '2006-06-07') -> AND (NOT fecha_inicio_alquiler
< '2006-06-05' AND fecha_final_alquiler
> '2006-06-07') -> and Fk_matricula_auto
= 'abb1414';
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 originalmysql
> SELECT `Fk_matricula_auto`, fecha_inicio_alquiler
, fecha_final_alquiler
-> (fecha_inicio_alquiler
NOT BETWEEN '2006-06-08' AND '2006-06-09') -> AND NOT (fecha_inicio_alquiler
< '2006-06-08' AND fecha_final_alquiler
> '2006-06-09') -> and Fk_matricula_auto
= 'abb1414'; +-------------------+-----------------------+----------------------+
| Fk_matricula_auto | fecha_inicio_alquiler | fecha_final_alquiler |
+-------------------+-----------------------+----------------------+
| abb1414 | 2006-06-06 | 2006-06-07 |
+-------------------+-----------------------+----------------------+
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 originalmysql
> SELECT `Fk_matricula_auto`, fecha_inicio_alquiler
, fecha_final_alquiler
-> (fecha_inicio_alquiler
NOT BETWEEN '2006-06-08' AND '2006-06-09') -> AND NOT (fecha_inicio_alquiler
< '2006-06-08' AND fecha_final_alquiler
> '2006-06-09') -> ;
+-------------------+-----------------------+----------------------+
| Fk_matricula_auto | fecha_inicio_alquiler | fecha_final_alquiler |
+-------------------+-----------------------+----------------------+
| 48731cda | 2006-06-06 | 2006-06-07 |
| abb1414 | 2006-06-06 | 2006-06-07 |
| abb141417 | 2006-06-06 | 2006-06-07 |
| abb1865 | 2006-06-04 | 2006-06-05 |
+-------------------+-----------------------+----------------------+
Si pongo que comience antes de la menor de las fechas, no devolverá nada:
Código MySQL:
Ver originalmysql
> SELECT `Fk_matricula_auto`, fecha_inicio_alquiler
, fecha_final_alquiler
-> (fecha_inicio_alquiler
NOT BETWEEN '2006-06-03' AND '2006-06-09') -> AND NOT (fecha_inicio_alquiler
< '2006-06-03' AND fecha_final_alquiler
> '2006-06-09');
Y si, finalmente, pongo como fecha una intermedia en la del "abb1865", devolverá los otros tres:
Código MySQL:
Ver originalmysql
> SELECT `Fk_matricula_auto`, fecha_inicio_alquiler
, fecha_final_alquiler
-> (fecha_inicio_alquiler
NOT BETWEEN '2006-06-03' AND '2006-06-04') -> AND NOT (fecha_inicio_alquiler
< '2006-06-03' AND fecha_final_alquiler
> '2006-06-04'); +-------------------+-----------------------+----------------------+
| Fk_matricula_auto | fecha_inicio_alquiler | fecha_final_alquiler |
+-------------------+-----------------------+----------------------+
| 48731cda | 2006-06-06 | 2006-06-07 |
| abb1414 | 2006-06-06 | 2006-06-07 |
| abb141417 | 2006-06-06 | 2006-06-07 |
+-------------------+-----------------------+----------------------+
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.