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

Seleccionar solo valores de una Tabla que están en otra

Estas en el tema de Seleccionar solo valores de una Tabla que están en otra en el foro de Bases de Datos General en Foros del Web. Hola! La cosa es así, tengo una tabla denominada Barrios, que posee todos los barrios de la Capital Federal de la Ciudad de Buenos Aires ...
  #1 (permalink)  
Antiguo 26/05/2008, 14:01
 
Fecha de Ingreso: marzo-2008
Mensajes: 73
Antigüedad: 16 años, 1 mes
Puntos: 0
Seleccionar solo valores de una Tabla que están en otra

Hola!

La cosa es así, tengo una tabla denominada Barrios, que posee todos los barrios de la Capital Federal de la Ciudad de Buenos Aires (Argentina), con una columna ID, y otra barrio, en la que está el nombre del mismo.

Esta tabla, a través de un LEFT JOIN, la "superpongo" a un dato que tengo en otra Tabla (Establecimientos), en su campo idbarrio que tiene el ID correspondiente al barrio en el que está el establecimiento.

Lo que necesito es una consulta MySQL que me seleccione de la Tabla barrios, solamente aquellos que están en algún idbarrio de la tabla Establecimientos, o sea, seleccionar todos los barrios que tienen algún establecimiento en el.

Gracias!!!
  #2 (permalink)  
Antiguo 27/05/2008, 00:47
 
Fecha de Ingreso: enero-2007
Mensajes: 38
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: Seleccionar solo valores de una Tabla que están en otra

SELECT * FROm Barrios WHERE id IN ( SELECT DISTINCT idbarrio FROM ESTABLECIMIENTO)

con esto bastaria
  #3 (permalink)  
Antiguo 27/05/2008, 02:54
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 3 meses
Puntos: 13
Respuesta: Seleccionar solo valores de una Tabla que están en otra

Cita:
Iniciado por Fagozitosia Ver Mensaje
SELECT * FROm Barrios WHERE id IN ( SELECT DISTINCT idbarrio FROM ESTABLECIMIENTO)

con esto bastaria
Mala practica, esta select es muy muy ineficiente.

ClickyMouse: Utiliza un JOIN sin LEFT.

Salu2
  #4 (permalink)  
Antiguo 27/05/2008, 02:57
 
Fecha de Ingreso: enero-2007
Mensajes: 38
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: Seleccionar solo valores de una Tabla que están en otra

me podrias explicar porque es una select ineficiente?
  #5 (permalink)  
Antiguo 27/05/2008, 03:07
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 3 meses
Puntos: 13
Respuesta: Seleccionar solo valores de una Tabla que están en otra

Primero, porque cada id de barrios es comparada con todos los idbarrios de establecimiento.
Segundo, porque lo que quieres hacer es un JOIN.

Te podría dar una justificación más formal, pero sería mucho más complicado.
sql es un lenguaje algebraico, asi que si traduces las dos selects a su correspondiente algebraico y haces un analisis de complejidad....

Salu2
  #6 (permalink)  
Antiguo 27/05/2008, 03:18
 
Fecha de Ingreso: enero-2007
Mensajes: 38
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: Seleccionar solo valores de una Tabla que están en otra

De acuerdo, comparto. Pero para este tipo de tablitas la ineficiencia es la minima, y al final lo que se hace es lo mismo. Pero si, la opcion del Join es mas correcta.

Salu2
  #7 (permalink)  
Antiguo 27/05/2008, 04:04
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 3 meses
Puntos: 13
Respuesta: Seleccionar solo valores de una Tabla que están en otra

claro si la tabla tiene 100 registros, la diferencia es insignificante, pero si la tabla de barrios tiene 10 millones de registros y la tabla de establecimientos tiene 100 millones, el rendimiento se notara mucho.

Hacer algo que funcione no significa que este bien hecho.

Un saludo
  #8 (permalink)  
Antiguo 27/05/2008, 05:09
 
Fecha de Ingreso: marzo-2008
Mensajes: 73
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Seleccionar solo valores de una Tabla que están en otra

Muchas Gracias a los dos, estas conversaciones enriquecen, y mucho...

Ahora está perfecto, cómo haría ahora, para sumar cada uno de los barrios, y que me de un valor numérico?

Ej: el barrio "X" aparece 3 veces, el "Y" 5 veces y el "Z" 10 veces; que me de esos valores "3", "5" y "10" por separado, y sin sumar el resto de los barrios que no tienen ninguna correspondencia en idbarrios ("A","B","C","D",etc)

Gracias de nuevo!
  #9 (permalink)  
Antiguo 27/05/2008, 05:21
 
Fecha de Ingreso: enero-2007
Mensajes: 38
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: Seleccionar solo valores de una Tabla que están en otra

Suponiendo las tablas:
BARRIOS(id_barrio, nombre_barrio) ESTABLECIMIENTOS(id_est, nombre_est, id_barrio)

Seria algo asi:

SELECT nombre_barrio, count(id_est)
FROM BARRIOS JOIN ESTABLECIMIENTOS
WHERE ESTABLECIMIENTOS.id_barrio = BARRIOS.id_barrio
GROUP BY nombre_barrio;
  #10 (permalink)  
Antiguo 27/05/2008, 05:43
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 3 meses
Puntos: 13
Respuesta: Seleccionar solo valores de una Tabla que están en otra

Fagozitosia si me permites un consejo, las condiciones del JOIN es mejor ponerlas en el FROM.

SELECT nombre_barrio, count(id_est)
FROM BARRIOS JOIN ESTABLECIMIENTOS ON ESTABLECIMIENTOS.id_barrio = BARRIOS.id_barrio
GROUP BY nombre_barrio;

Salu2
  #11 (permalink)  
Antiguo 28/05/2008, 00:51
 
Fecha de Ingreso: enero-2007
Mensajes: 38
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: Seleccionar solo valores de una Tabla que están en otra

es cierto, me confundi
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 08:08.