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

[SOLUCIONADO] Búsqueda en tablas relacionadas registros 1 a N

Estas en el tema de Búsqueda en tablas relacionadas registros 1 a N en el foro de Mysql en Foros del Web. Buenas, les tengo una consulta para ver si me pueden ayudar. Necesito un SQL para el siguiente caso: Tengo 3 tablas: Propiedades id_propiedad | ... ...
  #1 (permalink)  
Antiguo 04/10/2014, 12:18
Avatar de hgp147  
Fecha de Ingreso: diciembre-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 980
Antigüedad: 17 años, 3 meses
Puntos: 36
Búsqueda en tablas relacionadas registros 1 a N

Buenas, les tengo una consulta para ver si me pueden ayudar. Necesito un SQL para el siguiente caso:

Tengo 3 tablas:
Propiedades
id_propiedad | ... (otros campos)
Servicios
id_servicio | ... (otros campos)
Servicios_propiedades
id_servicio | id_propiedad

Necesito una consulta para obtener las propiedades que tengan determinados servicios asociados, pense en la siguiente consulta:

Código SQL:
Ver original
  1. SELECT * FROM propiedades
  2. WHERE id_propiedad IN (SELECT id_propiedad FROM servicios_propiedades WHERE id_servicio=1)
  3. AND id_propiedad IN (SELECT id_propiedad FROM servicios_propiedades WHERE id_servicio=1) ...

Hay una forma más óptima de realizar dicha consulta? Desde ya muchas gracias.
__________________
Spread Firefox | Download Day 2008
¡Únete en nuestra misión para alcanzar el Record Guinness al software más descargado en 24 horas! http://www.spreadfirefox.com/es-ES/worldrecord/

Última edición por gnzsoloyo; 04/10/2014 a las 17:21
  #2 (permalink)  
Antiguo 04/10/2014, 17:25
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, 4 meses
Puntos: 2658
Respuesta: Búsqueda en tablas relacionadas registros 1 a N

de manual básico:
Código MySQL:
Ver original
  1. FROM propiedades P
  2.     INNER JOIN servicios_propiedades SP ON P.id_propiedad = SP.id_propiedad
  3. WHERE id_servicio = 1;
O si son varios ID de servicios:
Código MySQL:
Ver original
  1. FROM propiedades P
  2.     INNER JOIN servicios_propiedades SP ON P.id_propiedad = SP.id_propiedad
  3. WHERE id_servicio IN(1, 2, 3, 4);
Si deben tener si o si todos los servicios, podría ser:

Código MySQL:
Ver original
  1. FROM propiedades P
  2.     INNER JOIN servicios_propiedades SP ON P.id_propiedad = SP.id_propiedad
  3. WHERE id_servicio IN ALL(1, 2, 3, 4);
o bien
Código MySQL:
Ver original
  1. SELECT P.*
  2. FROM propiedades P
  3.     INNER JOIN servicios_propiedades SP ON P.id_propiedad = SP.id_propiedad
  4. WHERE id_servicio IN(1, 2, 3, 4)
  5. GROUP BY P.id_propiedad
  6. HAVING COUNT(*) = 4;
__________________
¿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 04/10/2014, 20:05
Avatar de hgp147  
Fecha de Ingreso: diciembre-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 980
Antigüedad: 17 años, 3 meses
Puntos: 36
Respuesta: Búsqueda en tablas relacionadas registros 1 a N

Genial! La 3er opción es la que estaba necesitando.

Muchas gracias :).
__________________
Spread Firefox | Download Day 2008
¡Únete en nuestra misión para alcanzar el Record Guinness al software más descargado en 24 horas! http://www.spreadfirefox.com/es-ES/worldrecord/
  #4 (permalink)  
Antiguo 22/10/2014, 14:07
Avatar de hgp147  
Fecha de Ingreso: diciembre-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 980
Antigüedad: 17 años, 3 meses
Puntos: 36
Respuesta: Búsqueda en tablas relacionadas registros 1 a N

Al final la que si funcionó es la última. Gracias ;).
__________________
Spread Firefox | Download Day 2008
¡Únete en nuestra misión para alcanzar el Record Guinness al software más descargado en 24 horas! http://www.spreadfirefox.com/es-ES/worldrecord/

Etiquetas: campo, registros, relacionadas, select, sql, tabla, tablas
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 00:49.