Oracle - Consulta a múltiples tablas

   
Vista:

Consulta a múltiples tablas

Publicado por Aritz (2 intervenciones) el 22/10/2010 14:58:29
Buenos días,

Llevo varios días buscando soluciones a este problema y no he encontrado nada... ¡Y seguro que alguién lo ha hecho!

El problema es el siguiente. Necesito hacer una consulta a múltiples tablas a la vez para cálcular ciertos parámetros, y además no tengo control sobre la BBDD y sólo puedo realizar consultas.

He conseguido unir las 5 tablas por un lado mediante un INNER JOIN, y consigo sacar el resultado que quiero. Pero por otro lado tengo que juntar 4 de las tablas para que la referencia de la FECHA sea la misma, y esto sólo he conseguido que me funcione usando un WHERE e igualando las 4 fechas de las tablas. El problema es que ésto sólo me permite hacer la consulta de un día.

¿Como podría hacer esto y poder usar un rango temporal?

El FROM de la consulta quedaría así:

FROM tabla1
INNER JOIN tabla2 ON (tabla1.columna1 = tabla2.columna1)
INNER JOIN tabla3 ON (tabla1.columna3 = tabla3.columna1)
INNER JOIN tabla4 ON (tabla1.columna3 = tabla4.columna1)
INNER JOIN tabla5 ON (tabla1.columna3 = tabla5.columna1)
WHERE
tabla2.fecha = tabla3.fecha AND
tabla2.fecha = tabla4.fecha AND
tabla2.fecha = tabla5.fecha

¿Se podría hacer(sé que así no funciona) algo similar a esto?
FROM tabla1
INNER JOIN tabla2 ON (tabla1.columna1 = tabla2.columna1)
INNER JOIN tabla3 ON (tabla1.columna3 = tabla3.columna1)
INNER JOIN tabla4 ON (tabla1.columna3 = tabla4.columna1)
INNER JOIN tabla5 ON (tabla1.columna3 = tabla5.columna1)
AND tabla2
INNER JOIN tabla3 ON (tabla2.fecha = tabla3.fecha)
INNER JOIN tabla4 ON (tabla2.fecha = tabla4.fecha)
INNER JOIN tabla5 ON (tabla2.fecha = tabla5.fecha)

Muchas gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Consulta a múltiples tablas

Publicado por Leonardo Josué (44 intervenciones) el 22/10/2010 16:37:15
mmm... no estoy seguro de qué es que estás intentando hacer, pero te comento que en la cláusula ON del JOIN puedes poner más de un campo. A ver si de pura casualidad esto te sirve:

FROM tabla1
INNER JOIN tabla2 ON (tabla2.columna1 = tabla1.columna1)
INNER JOIN tabla3 ON
(tabla3.columna1 = tabla1.columna3 and tabla3.fecha = tabla2. fecha)
INNER JOIN tabla4 ON
(tabla4.columna1 = tabla1.columna3 and tabla4.fecha = tabla2.fecha)
INNER JOIN tabla5 ON
(tabla5.columna1 = tabla1.columna3 and tabla5.fecha = tabla2.fecha)

Si esto no es lo que necesitas te pediría que trates de explicar un poco mejor cuál es el problema y si es posible que pongas cuál es la estructura de tus tablas y que pongas también algunos datos de ejemplo, para tratar de encontrar alguna otra alternativa.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Consulta a múltiples tablas

Publicado por Aritz (2 intervenciones) el 25/10/2010 09:44:57
En primer lugar gracias Leonardo. Pero no he conseguido que funcione lo que me has propuesto...

A ver si con lo que pongo hoy me explico mejor lo que quiero.

Tengo 5 tablas. En la tabla 1 está la información genérica de todas las tablas. Sólo sirve para igualar las demás tablas porque es la única que contiene la inforamción de los 2 tipos de tabla que tengo que manejar.

La Tabla 2 contiene la información de la ubicación. Es indispensable sacar la información de PROVINCIA y de UBICACIÓN para que la consulta sea unívoca y conseguir la ubicación exacta d la oficina.

Y por último las TABLAS 3, 4 y 5 contienen los datos, pero no la información de la ubicación. Si os fijáis en el dibujo creo que lo veréis más claro, cada tipo de marca indica una relación.

Entonces lo que tengo que hacer es usando la TABLA 1 como tabla dominante es:
1.- Relación con TABLA 2 para conseguir la ubicación y los datos relacionados de esta tabla
2.- Relación con TABLAS 3, 4 y 5 para obtener los datos
NOTA: una vez hechas estas 2 relaciones conseguiría una consulta así:

PROVINCIA-UBICACIÓN-NOMBRE-VALOR

Pero claro, los valores los necesito por día, entonces tengo que relacionar las tablas 2, 3, 4 y 5 por FECHA y conseguir esta consulta.

FECHA-PROVINCIA-UBICACIÓN-NOMBRE-VALOR

Es importante mantener esta estructura porque así puedo hacer agrupados y tener una visión global. Estos agrupados siempre serán relacionados a FECHA, PROVINCIA y/o UBICACIÓN, ya que tanto VALOR como NOMBRE siempre son únicos.

RELACIÓN INNER CON OTRO TIPO DE TABLA PARA QUE LAS REFERENCIAS SEAN UNÍVOCAS
+
+
+ TABLA2
+ =========
++++++ PROVINCIA
+ ++++ UBICACIÓN
++ FECHA-----------------------
++ |
++ |
++ TABLA 3 |
++ ========= |
++ --- NOMBRE |
++| ** VALOR |
TABLA 1 ++| * FECHA-----------------------|
========= ++| * |
PROVINCIA + +| * TABLA 4 |
UBICACIÓN ++ | * ======== |----------- RELACIÓN DE FECHAS
NOMBRE ---|-- NOMBRE |
VALOR ***|*** VALOR |
| * FECHA-----------------------|
| * |
| * TABLA 5 |
| * ========= |
--- NOMBRE |
** VALOR |
* FECHA------------------------
*
** RELACIÓN INNER PARA QUE LAS REFERENCIAS SEAN UNÍVOCAS

Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Consulta a múltiples tablas

Publicado por asdfg (8 intervenciones) el 25/10/2010 15:57:49
Lo que necesitas no es nada complicado puedes usar un administrador de base de datos como el toad o e pl/sql developer y hacer las consultas graficas y agregarle las reglas necesarias si no te mas bien codigo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Consulta a múltiples tablas

Publicado por Leonardo Josué (44 intervenciones) el 25/10/2010 23:20:05
Buenas tardes de nuevo Aritz

Dices que no haz conseguido hacer que funciones lo que te propuse hacer, pero no mencionas donde está el fallo. ¿la consulta marca algún error? si es así ¿qué error está marcando? o tal vez es que los resultados no son los esperados, si es así ¿qué es lo que te está regresando la consulta y qué es lo que quieres que te regrese?.

Lamentablemente no me quedó muy claro aun con el ejemplo que pusiste cómo son las relaciones entre tus tablas, como te escribí en el post, igual y es conveniente que pongas algunos datos de ejemplo y qué necesitas de salida para poder cargar esos datos en una base de pruebas y tratar de afinar la consulta.

Saludos.
Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Consulta a múltiples tablas

Publicado por Aritz (1 intervención) el 29/10/2010 10:36:30
Hola Leonardo Josué,

Te dibujo la tablas para que te hagas una idea de lo que necesito. Está claro que el principal problema es que el criterio de definición de tablas ha sido erróneo, pero yo no tengo acceso a ellas y sólo puedo intentar conseguir el resultado que yo necesito mediante consultas.

TABLA 1: Tabla que contiene la definición de todas las oficinas, relaciona las poblaciones y las zonas
PROVINCIA - POBLACIÓN - ZONA - BARRIO

TABLA 2: Es un tipo de tabla que guarda información agrupada de las poblaciones, pero no tiene referencia de las ZONAS ni de los BARRIOS. Todo ello agrupado por FECHA

FECHA - PROVINCIA - POBLACIÓN - DATOS2

TABLA 3: Es una tabla que guarda otro tipo de información, pero agrupadas por ZONAS y BARRIOS. Todo ello agrupado por FECHA

FECHA - ZONA - BARRIOS - DATOS3

TABLA 4 y TABLA 5 son iguales que la TABLA 3 sólo que los DATOS que obtengo son diferentes. Llámemosles DATOS4 y DATOS5

Entonces la consulta que quiero hacer debería de dar lo siguiente:

FECHA-PROVINCIA-POBLACIÓN-DATOS2-DATOS3-DATOS4-DATOS5

Entonces para conseguir esto lo que he hecho ha sido en primer lugar "configurar" mi consulta mediante un INNER JOIN.

tabla1
INNER JOIN tabla2 ON (PROVINCIA = PROVINCIA) AND (POBLACION = POBLACION)
INNER JOIN tabla3 ON (ZONA= ZONA) AND (BARRIO = BARRIO)
INNER JOIN tabla4 ON (ZONA= ZONA) AND (BARRIO = BARRIO)
INNER JOIN tabla5 ON (ZONA= ZONA) AND (BARRIO = BARRIO)

Con estos INNER JOIN consigo lo siguiente. En este momento los DATOSx todos son agrupados(sumas) respecto a POBLACIÓN, porque con el INNER JOIN consigo crear relaciones unívocas para cada referencia que tengo.

PROVINCIA-POBLACIÓN-DATOS2-DATOS3-DATOS4-DATOS5

Ahora, y aquí viene el problema, necesito referenciar estos datos por la FECHA. En este momento sólo puedo hacer una consulta por día usando un WHERE.

WHERE
tabla2.FECHA = tabla3.FECHA AND
tabla2.FECHA = tabla4.FECHA AND
tabla2.FECHA = tabla5.FECHA

Pero no consigo que me coja varias fechas.

He intentado lo que me comentaste de poner la igualdad de FECHAS en el INNER JOIN, pero como no está referenciado a TABLA1 me da error. Otra cosa que he intentado es separar con una "," el INNER JOIN de arriba y hacer otro para la fecha... Pero tampoco me ha funcionado.

No se me ocurren más cosas... he probado multitud de variantes, pero hay algo que se me escapa.

Muchas gracias

PD: Tengo un editor gráfico, y no me sabe solucionar esta relación. No sé si es muy complicada, no se puede hacer o que el editor gráfico que me da la propia herramienta que uso por motivos laborales es demasiado básica...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Consulta a múltiples tablas

Publicado por Juan Francisco (1 intervención) el 28/08/2014 08:03:51
Hola mira este video

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Consulta a múltiples tablas

Publicado por Josselin (1 intervención) el 21/01/2015 20:58:48
Gracias, Leonardo, a mi sirvio de mucho tu respuesta, aunque es para ora query. :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar