Problemón con consulta sql

Estoy desarrollando un site web en el que utilizo mysql 4.0.15. Esta versión no soporta subconsultas, así que me veo en la necesidad de transformar la siguiente subconsulta a un comando sql normal sin subconsultas:
SELECT * FROM horas WHERE hora NOT IN (SELECT hora FROM reservas WHERE data='2004-10-27');
¿Es posible hacerlo?
En el manual de sql he leído lo siguiente:
<!--Manual de sql
The queries:
SELECT * FROM table1 WHERE id NOT IN (SELECT id FROM table2);
SELECT * FROM table1 WHERE NOT EXISTS (SELECT id FROM table2
WHERE table1.id=table2.id);
Can be rewritten as:
SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id
WHERE table2.id IS NULL;
-->

2 respuestas

Respuesta
1
Llevo un rato dando vueltas y me parece correcta la sentencia.
La sentencia saca las horas de la tabla horas que no tengan correspondencia con ninguna hora de la tabla reservas.
Si quitas la clausula WHERE puedes ver algo de este estilo
Horas reservas
12:00 NULL
14:00 NULL
16:00 NULL
18:00 18:00
22:00 22:00
Al poner el where is null tienen que salir solo las 12:00 14:00 y 16:00.
¿Puede ser un problema de datos en las tablas?
Si no te sale la tabla que te comento al quitar el where es que algo nos dejamos en el tintero.
Respuesta
1
En oracle lo que puedes hacer es algo así como un anti join:
SELECT horas.*
FROM horas a, reservas b
WHERE a.hora <> b.hora
AND b.data='2004-10-27';
Creo que también lo podrías hacer con MySQL, es como hacer un Join, solo que en lugar de hacer una igualdad es una diferencia,
no sé si con MySQL se escribe así: ! = ó <> pero así podrías evitar las subconsultas.
Gracias, pero no me sirve. No sé por qué razón, mysql me saca cero registros. Misterios de la informática. De todas formas, muchas gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas