Multilpes JOIN

From: Miguel <mmiranda(at)123(dot)com(dot)sv>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Multilpes JOIN
Date: 2005-10-13 17:05:26
Message-ID: 434E93D6.6030006@123.com.sv
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola, estoy emproblemado con una consulta algo compleja que no se si
sera posible hacerla, por ello acudo a los gurus de la lista, es un join
de 4 tablas:

radius=# select * from planes_horarios;
idplan | idhorario
--------+-----------
1 | 1
(1 row)

radius=# select * from horarios;
idhorario | horario
-----------+-----------------
2 | tarifa_reducida
1 | tarifa_plena
(2 rows)

radius=# select * from horarios_promociones;
idhorario | fecha_inicio | fecha_fin | hora_inicio | hora_fin
-----------+--------------+------------+-------------+----------
1 | 2005-10-12 | 2005-10-31 | 08:00:00 | 23:59:59
2 | 2005-10-12 | 2005-10-31 | 00:00:00 | 07:59:59
(2 rows)

radius=# select * from tarifas;
idhorario | idbanda_origen | idbanda_destino | tarifa
-----------+----------------+-----------------+--------
1 | 10 | 20 | 0.2000
2 | 10 | 20 | 0.1700
(2 rows)

Yo quiero saber que tarifa (plena o reducida) voy a aplicar, yo ya se de
antemano el idplan y idbanda_origen y idbanda_destino, yo se que puedo
hacerlo con dos consultas:

SELECT INTO idhorario_ok phor.idhorario
FROM planes_horarios phor
INNER JOIN horarios hor USING (idhorario)
INNER JOIN horarios_promociones horp USING (idhorario)
WHERE phor.idplan = idplan
AND CURRENT_DATE
BETWEEN horp.fecha_inicio AND horp.fecha_fin
AND CURRENT_TIME
BETWEEN horp.hora_inicio AND horp.hora_fin;

Si se corre en este momendo esto devolveria 1, luego:

SELECT tarifa
FROM tarifas
WHERE idhorario = idhorario_ok
AND idbanda_origen = 10
AND idbanda_destino = 20;

esto devolveria 0.20

Pero me gustaria hacerlo en una sola consulta, ya que este es un
ejemplo, en realidad existe tambien la tabla horarios_general (que es el
dia a dia del plan tarifario, y dependiendo del dia si es navidad, dia
de la madre, etc habra que aplicar la tarifa promocional).
No quisiera tener que hacer 4 querys saber la tarifa.

No se si me explique bien, si necesitan mayores detalles con gusto los
puedo proporcionar.

---
Miguel

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message WILLIAM PARRA 2005-10-13 20:33:20 Comunidad Postgresql Colombia
Previous Message Josue Andres Dorantes Rios 2005-10-13 16:59:13 Problema cambiando PWD a usuario