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

Consulta SELECT con 2 tablas

Estas en el tema de Consulta SELECT con 2 tablas en el foro de Mysql en Foros del Web. Hola, tengo 2 tablas una se llama casas , en donde tengo un listado con todas las casas en alquiler y la otra tabla se ...
  #1 (permalink)  
Antiguo 08/05/2009, 02:32
Avatar de RUX
RUX
 
Fecha de Ingreso: enero-2004
Ubicación: Las Palmas de Gran Canari
Mensajes: 566
Antigüedad: 20 años, 3 meses
Puntos: 0
Consulta SELECT con 2 tablas

Hola, tengo 2 tablas una se llama casas, en donde tengo un listado con todas las casas en alquiler y la otra tabla se llama casas_reservas en donde tengo registradas las casas que estan reservadas de la anterior tabla.

Ejemplo de fila en casas:

id - nombre - m2
10 - La manchega - 200m2
11 - Los leones - 180m2

Ejemplo de fila en casas_reservas:

id - inquilino - id_casa_reservada
34 - Pepe - 10

Bien. Yo lo que quiero es ofrecer un listado de las casas que no estén alquiladas ya que en casas_reservas estarán registradas las casas que han sido reservadas a través de id_casa_reservada. ¿Me explico?

Gracias de antemano
__________________
Rux.es - Sitio Personal | IslaRock.com - Todo Rock
  #2 (permalink)  
Antiguo 08/05/2009, 04:13
 
Fecha de Ingreso: abril-2009
Ubicación: Vitoria
Mensajes: 160
Antigüedad: 15 años
Puntos: 1
Respuesta: Consulta SELECT con 2 tablas

Puede que te funcione esto....
Código SQL:
Ver original
  1. SELECT * FROM casas WHERE casas.id NOT IN (SELECT id_casa_reservada FROM casas_reservadas)

pruebalo y avisa si funciona...
  #3 (permalink)  
Antiguo 08/05/2009, 04:38
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Consulta SELECT con 2 tablas

Prueba también esta otra:
Código sql:
Ver original
  1. SELECT c.id, c.nombre, c.m2 FROM casas c LEFT JOIN casas_reservas cs
  2.   ON c.id=cs.id_casa_reservada WHERE cs.id_casa_reservada IS NULL
  #4 (permalink)  
Antiguo 08/05/2009, 04:47
Avatar de RUX
RUX
 
Fecha de Ingreso: enero-2004
Ubicación: Las Palmas de Gran Canari
Mensajes: 566
Antigüedad: 20 años, 3 meses
Puntos: 0
Respuesta: Consulta SELECT con 2 tablas

Muchisimas gracias por contestar, me pueden valer las dos opciones, pero que pasaría si la consulta fuera un poco más compleja, es decir si le añadiera un filtrado por fechas:

Quiero que me muestre las casas de la tabla casas que no esten dentro de este rango de fechas: 2009-05-01 y 2009-06-01 en casas_reservas:

id - inquilino - id_casa_reservada - fecha_entrada - fecha_salida
34 - Pepe - 10 - 2009-05-01 - 2009-06-01
35 - Juan - 8 - 2009-06-01 - 2009-06-12

Ojala me explique bien...
Gracias nuevamente
__________________
Rux.es - Sitio Personal | IslaRock.com - Todo Rock
  #5 (permalink)  
Antiguo 08/05/2009, 05:12
 
Fecha de Ingreso: abril-2009
Ubicación: Vitoria
Mensajes: 160
Antigüedad: 15 años
Puntos: 1
Respuesta: Consulta SELECT con 2 tablas

Pues en principio no se deberia complicar mucho mas, ya que sigues necesitando el ID de la casa que ha sido reservada pero filtrandolo un poco mas....

Código SQL:
Ver original
  1. SELECT * FROM casas WHERE casas.id NOT IN
  2.      (SELECT id_casa_reservada FROM casas_reservadas
  3.      WHERE fecha_entrada < parametro_fecha_entrada
  4.      AND fecha_salida > parametro_fecha_salida)

la verdad esque no estoy muy seguro despues de escribirlo, pruebalo aver que pasa...

Última edición por tokero; 08/05/2009 a las 05:13 Razón: Codigo SQL
  #6 (permalink)  
Antiguo 08/05/2009, 05:41
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Consulta SELECT con 2 tablas

para eso de entradas y salidas, mira este post donde avatar810 nos da una lección ( desde luego a mí sí) sobre cómo trabajar con ese tipo de datos aplicando la teoría de conjuntos.
http://www.forosdelweb.com/f86/selec...fechas-693114/

Última edición por jurena; 08/05/2009 a las 08:25
  #7 (permalink)  
Antiguo 12/05/2009, 06:30
Avatar de RUX
RUX
 
Fecha de Ingreso: enero-2004
Ubicación: Las Palmas de Gran Canari
Mensajes: 566
Antigüedad: 20 años, 3 meses
Puntos: 0
Respuesta: Consulta SELECT con 2 tablas

Tokero eso son como dos consultas en 1?? en recursos de sistema que tal son esas consultas?? Gracias, probaré esa consulta ab que tal y Gracias jurena!! voy a echarle un ojo a ese link.
__________________
Rux.es - Sitio Personal | IslaRock.com - Todo Rock
  #8 (permalink)  
Antiguo 12/05/2009, 11:09
Avatar de rodno  
Fecha de Ingreso: enero-2009
Ubicación: En algun lugar de Cuba
Mensajes: 426
Antigüedad: 15 años, 3 meses
Puntos: 43
De acuerdo Respuesta: Consulta SELECT con 2 tablas

Buenas,

Las consultas dentro de otras no son aconsejadas, lo mas optimo es usar INNER JOIN, LEFT JOIN o RIGHT JOIN .

Saludos
  #9 (permalink)  
Antiguo 14/05/2009, 03:38
Avatar de RUX
RUX
 
Fecha de Ingreso: enero-2004
Ubicación: Las Palmas de Gran Canari
Mensajes: 566
Antigüedad: 20 años, 3 meses
Puntos: 0
Respuesta: Consulta SELECT con 2 tablas

La consulta de tokero me vale... y funciona bien en rangos de meses del mismo año, pero cuando es de un año anterior al presente (por ejemplo 2008-03-01 a 2009-03-01) no funciona bien. ¿Alguien sabe por que?

PD: Cabe decir que los campos estan como DATE. Por otro lado me gustaria que alguien me construyera una consulta de ejemplo con las funciones que dice rodno.

Muchas gracias de antemano
__________________
Rux.es - Sitio Personal | IslaRock.com - Todo Rock
  #10 (permalink)  
Antiguo 14/05/2009, 05:41
Avatar de RUX
RUX
 
Fecha de Ingreso: enero-2004
Ubicación: Las Palmas de Gran Canari
Mensajes: 566
Antigüedad: 20 años, 3 meses
Puntos: 0
De acuerdo Respuesta: Consulta SELECT con 2 tablas

He encontrado una consulta que parece que me vale al 100%. ¿Como la veis?, ¿existe algún modo de hacerla más sencilla?.

Código Codigo SQL:
Ver original
  1. SELECT id FROM reservas WHERE
  2. (calendario_entrada <= '2009-05-15' AND calendario_salida >= '2009-05-30') OR
  3. (calendario_entrada BETWEEN '2009-05-15' AND '2009-05-30' OR
  4. calendario_salida BETWEEN '2009-05-15' AND '2009-05-30')
  5. GROUP BY id

Lo que necesito es seleccionar todas las filas cuyo rango de fechas de calendario_entrada y calendario_salida interfieran con el rango de fechas 2009-05-15 y 2009-05-30 respectivamente.

Gracias!!
__________________
Rux.es - Sitio Personal | IslaRock.com - Todo Rock
  #11 (permalink)  
Antiguo 14/05/2009, 13:57
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Consulta SELECT con 2 tablas

RUX,
creo que esta te servirá. No la he probado.
Código sql:
Ver original
  1. SELECT id FROM reservas
  2.    WHERE calendario_entrada <= '2009-05-30' AND calendario_salida >= '2009-05-15' GROUP BY id

Si controlas que calendario_salida sea igual o posterior a calendario_entrada, esto debería bastar. Si te funciona, no es mío, es de avatar810.
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 18:59.