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

ayuda con una consulta entre tablas!!

Estas en el tema de ayuda con una consulta entre tablas!! en el foro de PostgreSQL en Foros del Web. Saludos Señores me ha surgido una consulta la cual no logro solucionar, espero me puedan colaborar. tengo en una tabla un listado de ciudades. en ...
  #1 (permalink)  
Antiguo 14/10/2009, 10:16
 
Fecha de Ingreso: abril-2007
Mensajes: 110
Antigüedad: 17 años, 7 meses
Puntos: 0
ayuda con una consulta entre tablas!!

Saludos Señores

me ha surgido una consulta la cual no logro solucionar, espero me puedan colaborar.

tengo en una tabla un listado de ciudades.
en otra tabla un listado de bodegas.

cada bodega tiene una llave foranea que la identifica a la ciudad de pertenencia, y tiene un estado que puede ser NULL o NOT NULL,


tengo que listar las ciudades que tienen todas las bodegas de la ciudad sea no vacias!!

trato con este codigo

Código:
SELECT  c.id_ciudad , c.nombre FROM  ciudades c, bodega b  WHERE   c.id_ciudad= b.ciudad_id_ciudad AND b.estado_bodega IS NOT NULL ";

pero me muestra las ciudades repitiendo segun el numero de bodegas que sean NOT NULL.

como puedo validar que me muestre las que en todas las bodegas de la ciudad sea NOT NULL

Muchas gracias estare atento!!
  #2 (permalink)  
Antiguo 14/10/2009, 10:25
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: ayuda con una consulta entre tablas!!

Código sql:
Ver original
  1. SELECT  DISTINCT  c.id_ciudad , c.nombre FROM  
  2. ciudades c INNER JOIN bodega b  
  3. ON  c.id_ciudad= b.ciudad_id_ciudad
  4. WHERE b.estado_bodega IS NOT NULL;

Pruebala así
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 15/10/2009, 08:41
 
Fecha de Ingreso: abril-2007
Mensajes: 110
Antigüedad: 17 años, 7 meses
Puntos: 0
Respuesta: ayuda con una consulta entre tablas!!

Cita:
Iniciado por huesos52 Ver Mensaje
Código sql:
Ver original
  1. SELECT  DISTINCT  c.id_ciudad , c.nombre FROM  
  2. ciudades c INNER JOIN bodega b  
  3. ON  c.id_ciudad= b.ciudad_id_ciudad
  4. WHERE b.estado_bodega IS NOT NULL;

Pruebala así

la linea o el comando distintc funciona bienn
pero me sigue consultando mal.

la idea es la siguiene con un ejemplo.

tengo tre ciudades cada ciudad tiene tre bodegas y cada bodega puede tener el estado NULL o NOT NULL

ciudad1
Bodega1 ---------- NULL
Bodega2 ----------- NOT NULL
Bodega3 ----------- NULL

ciudad2
Bodega1 ---------- NOT NULL
Bodega2 ----------- NOT NULL
Bodega3 ----------- NULL

ciudad3
Bodega1 ---------- NOT NULL
Bodega2 ----------- NOT NULL
Bodega3 ----------- NOT NULL

la idea de la consulta es que solo me arroje la ciudad 3 porque todas las bodegas que estan relacionadas a esta ciudad son NOT NULL.

Seguire atento y probandoo
muchas gracias
  #4 (permalink)  
Antiguo 18/10/2009, 14:35
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: ayuda con una consulta entre tablas!!

Hola
Bueno, viendo tus condiciones, se me ocurre que uses un count para revisar cuantas bodegas obtienes de cada ciudad, algo así


Código sql:
Ver original
  1. SELECT c.id_ciudad, COUNT(c.id_ciudad) AS totalbodegas, c.nombre
  2. FROM ciudades c INNER JOIN bodega b ON c.id_ciudad = b.ciudad_id_ciudad
  3. WHERE b.estado_bodega IS NOT NULL GROUP BY c.id_ciudad;

Obteniendo por ej
id_ciudad totalbodegas nombre
1 2 ciudad1
2 1 ciudad2
3 3 ciudad3

Y pues ya con esto, se puede manejar condicionales, ahora pregunto yo, esto que necesitas es sobre el motor como tal de postgresql o va asociado en algún desarrollo con php por ej?
si va ligado con un desarrollo, pues es fácil la parte que faltaría que es validar si el dato totalbodegas es 3, y que lo muestre, en el motor como tal faltaría hacer algo más, y pues me pongo en eso mientras respondes
saludos

uhm, bueno, agrego esto

Código sql:
Ver original
  1. SELECT IF(COUNT(c.id_ciudad)>2,c.nombre,'') AS totalbodegas, c.nombre
  2. FROM ciudades c INNER JOIN bodega b ON c.id_ciudad = b.ciudad_id_ciudad
  3. WHERE b.estado_bodega IS NOT NULL GROUP BY c.id_ciudad;

el resultado es este
totalbodegas
enblanco
enblanco
ciudad3

si se quiere evitar esos "en blanco", pues ya entrarías a crear una función
en la bd para manejar variables y hacerlo más adecuado
saludos

Última edición por mortiprogramador; 18/10/2009 a las 14:57 Razón: complemento
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 22:02.