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

[sql]consulta de 3 tablas, sí y sólo sí está en una

Estas en el tema de [sql]consulta de 3 tablas, sí y sólo sí está en una en el foro de PostgreSQL en Foros del Web. Saludos Tengo una tabla en mysql que leo desde postgres (por lo cual no está relacionada con la BD) que tiene el total de población ...
  #1 (permalink)  
Antiguo 19/05/2008, 15:00
 
Fecha de Ingreso: agosto-2005
Ubicación: Mérida, Venezuela
Mensajes: 732
Antigüedad: 19 años, 3 meses
Puntos: 7
[sql]consulta de 3 tablas, sí y sólo sí está en una

Saludos

Tengo una tabla en mysql que leo desde postgres (por lo cual no está relacionada con la BD) que tiene el total de población por estado, municipio, parroquia, centro poblado, para cada año.
demografia (codest, codmun, codpar, codcen, poblacion, año)

(a partir de aquí todo es postgres, obvio otros campos de otro interés)
Una tabla de registros de natalidad que tiene el total de nacimientos por estado, municipio, parroquia, centro poblado para cada año.
nacimientos (codest varchar(2), codmun varchar(2), codpar varchar(2), codcen varchar(2), nacimientos integer, año date)

Una tabla de registro de defunciones que tiene el total de defunciones por estado, municipio, parroquia, centro poblado para cada año.
defunciones (codest varchar(2), codmun varchar(2), codpar varchar(2), codcen varchar(2), defunciones integer, año date)

Una tabla donde están los Estados, otra los Municipios, otra las Parroquias, y otra los Centros Poblados, de la forma:
estado (codest varchar(2), nomest varchar(30))
municipio (codest varchar(2), codmun varchar(2), nommun varchar(30))
parroquia (codest varchar(2), codmun varchar(2), codpar varchar(2), nompar varchar(30)).

Tengo un formulario para reportes, donde la persona selecciona, por ejemplo, el estado y el año, y debería devolver:
para el año y el estado seleccionado, todos los municipios que tengan datos de nacimiento y defunciones, pero que previamente estén en demografia... es decir, si hay nacimientos para el municipio X, pero ese municipio no tiene registros de demografía, no se debe mostrar...

Estoy medio enredado con esta consulta, así que si me pueden dar algo de luz...
__________________
Gracias de todas todas
-----
Linux!
  #2 (permalink)  
Antiguo 19/05/2008, 16:15
Avatar de Sergestux  
Fecha de Ingreso: agosto-2007
Ubicación: Tapachula
Mensajes: 1.218
Antigüedad: 17 años, 3 meses
Puntos: 20
Respuesta: [sql]consulta de 3 tablas, sí y sólo sí está en una

Checate la info de los JOINS
  #3 (permalink)  
Antiguo 19/05/2008, 16:32
 
Fecha de Ingreso: agosto-2005
Ubicación: Mérida, Venezuela
Mensajes: 732
Antigüedad: 19 años, 3 meses
Puntos: 7
Respuesta: [sql]consulta de 3 tablas, sí y sólo sí está en una

Probando sobre 2 tablas, ya tengo problemas:
demografia tiene dos registros:
anno | codest | codmun | poblacion
2000 | 14 | 01 | 1000
2000 | 14 | 18 | 1234

nacimientos tiene:
codest | codmun | nacimientos
14 | 01 | 10
14 | 18 | 5

Para probar, hice:
Código:
SELECT mysql.demografia.poblacion, mysql.demografia.codest, mysql.demografia.codmun, pg.nacimientos.total_nac, mysql.demografia.anno
FROM mysql.demografia, pg.nacimientos
WHERE mysql.demografia.anno = '2000' AND mysql.demografia.codest = pg.nacimientos.codest 
  AND mysql.demografia.codmun = pg.nacimientos.codmun
que es lo mismo que (utilizando JOINs):
Código:
SELECT mysql.demografia.poblacion, mysql.demografia.codest, mysql.demografia.codmun, pg.nacimientos.total_nac, mysql.demografia.anno
FROM mysql.demografia
FULL JOIN sir.nacimientos USING (codest, codmun)
WHERE mysql.demografia.anno = '2000'
y me devuelve:
poblacion | codest | codmun | nacimientos | anno
1000 | 14 | 01 | NULL | 2000
1000 | 14 | 01 | 0 | 2000
1000 | 14 | 01 | 10 | 2000
1234 | 14 | 18 | 5 | 2000

con lo que se observar que está mal... obviamente el problema está entre el traclado y el computador, jeje, pero por eso digo, estoy algo transtornado y pido algo de luz...
__________________
Gracias de todas todas
-----
Linux!

Última edición por cacr; 19/05/2008 a las 16:39
  #4 (permalink)  
Antiguo 19/05/2008, 16:42
Avatar de Sergestux  
Fecha de Ingreso: agosto-2007
Ubicación: Tapachula
Mensajes: 1.218
Antigüedad: 17 años, 3 meses
Puntos: 20
Respuesta: [sql]consulta de 3 tablas, sí y sólo sí está en una

Por eso te decía que vieras la info, prueba asi:

Código PHP:
SELECT Dem.poblacionDem.codestDem.codmunNac.total_nacDem.anno
FROM mysql
.demografia Dem RIGHT JOIN pg.nacimientos Nac 
    ON Dem
.codest Nac.codest  AND Dem.codmun Nac.codmun
WHERE Dem
.anno '2000' 
O en su caso sustituye RIGHT por LEFT
  #5 (permalink)  
Antiguo 19/05/2008, 16:54
 
Fecha de Ingreso: agosto-2005
Ubicación: Mérida, Venezuela
Mensajes: 732
Antigüedad: 19 años, 3 meses
Puntos: 7
Respuesta: [sql]consulta de 3 tablas, sí y sólo sí está en una

Mismo resultado, con left, right, full...

Estoy empezando a creer que la consulta está arrojando un resultado correcto, pero... las dos primeras tuplas que devuelve, con NULL y 0 para nacimientos? no vienen de ningún lado!
__________________
Gracias de todas todas
-----
Linux!
  #6 (permalink)  
Antiguo 19/05/2008, 17:21
Avatar de Sergestux  
Fecha de Ingreso: agosto-2007
Ubicación: Tapachula
Mensajes: 1.218
Antigüedad: 17 años, 3 meses
Puntos: 20
Respuesta: [sql]consulta de 3 tablas, sí y sólo sí está en una

Entonces tal vez tu solucion sea usar la clausula IN, es decir
Código:
Nac.codest IN (select codest from demografias)
  #7 (permalink)  
Antiguo 20/05/2008, 07:09
 
Fecha de Ingreso: agosto-2005
Ubicación: Mérida, Venezuela
Mensajes: 732
Antigüedad: 19 años, 3 meses
Puntos: 7
Respuesta: [sql]consulta de 3 tablas, sí y sólo sí está en una

Sergestux

Gracias por toda tu ayuda... como dije anteriormente, la consulta estaba devolviendo todo correctamente, el problema era mío... sustituí, los campos por un * para ver de qué se trataba, y la solución estaba en el where...

Gracias nuevamente
__________________
Gracias de todas todas
-----
Linux!
  #8 (permalink)  
Antiguo 20/05/2008, 16:26
 
Fecha de Ingreso: agosto-2005
Ubicación: Mérida, Venezuela
Mensajes: 732
Antigüedad: 19 años, 3 meses
Puntos: 7
Respuesta: [sql]consulta de 3 tablas, sí y sólo sí está en una

Bueno... resulta que el lío anterior era entre 2 tablas... ahora sí voy con el asunto del post, con 3 tablas..

Tengo una tercera tabla
defunciones tiene un registro:
anno | codest | codmun | defunciones
2000 | 14 | 01 | 16

en el momento que hago la consulta, me sale cualquier cosa, entonces, pregunta de teoría ¿sí las otras consultas me devuelven 2 registros, y la tercera 1, al combinarlas, es posible que devuelva cero donde no hay datos?
__________________
Gracias de todas todas
-----
Linux!
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 09:26.