tabla "autoreferenciada"

From: Virginia <mavir78(at)gmail(dot)com>
To: Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: tabla "autoreferenciada"
Date: 2010-12-14 15:45:02
Message-ID: AANLkTinZm=k4HvWzd1XJKXwpbCbo9CtELQX6SbLr0Vko@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Buenos días lista!!!
Un saludo para todos por acá! Quisiera saber si pueden ayudarme con lo
siguiente:
Tengo una tabla que guarda los mensajes enviados internamente entre
distintos departamentos con la estructura

CREATE TABLE msj_mensajes_enviados
(
msjid serial NOT NULL,
areaid integer NOT NULL,
asunto text,
texto_mensaje text, -- cuerpo del mensaje
destinatario text, -- contactoid si es externo, areaid si es dentro de la
empresa, clienteid si es cliente
destinatario_id integer,
remitente text, -- contactoid si es externo, areaid si es dentro de la
empresa, clienteid si es cliente
remitente_id integer,
fecha_enviado date,
fecha_leido date,
status_id smallint,
anonimo_id smallint,
msj_referencia_id integer, -- referencia al id de esta misma tabla, para
el seguimiento del mensaje
CONSTRAINT msj_mensajes_enviados_pkey PRIMARY KEY (msjid)
)

Necesito hacer una consulta que me muestre los mensajes que antecedan al que
estoy escribiendo como "respuesta" de otro, algo así como los mensajes que
se muestran en la lista, una secuencia de las respuestas a un mensaje
inicial.
El mensaje inicial tiene un msj_referencia_id = 0, si el mensaje con msjid =
12 es respuesta del mensaje con msjid = 2 entonces el msj_referencia_id de
msjid = 12 es 2.
Espero haberme explicado correctamente y que alguien pueda ayudarme, ya que
hasta el momento solo me trae los mensajes referenciados pero no el inicial.

SELECT me.msjid, me.texto_mensaje, to_char(me.fecha_enviado,'dd/mm/yyyy') as
fecha_enviado, me.msj_referencia_id
FROM msj_mensajes_enviados me WHERE me.destinatario_id = 20000 AND
me.status_id = 7 AND
me.areaid = 111 AND me.msj_referencia_id != 0
UNION
SELECT me.msjid, me.texto_mensaje, to_char(me.fecha_enviado,'dd/mm/yyyy') as
fecha_enviado, me.msj_referencia_id
FROM msj_mensajes_enviados me WHERE me.status_id = 7 AND
me.areaid = 111 AND me.msjid = (SELECT me.msj_referencia_id
FROM msj_mensajes_enviados me WHERE me.msj_referencia_id != 0 limit 1)

Gracias!

------------
Virginia
------------

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2010-12-14 15:49:36 Re: tabla "autoreferenciada"
Previous Message Miguel Angel Hernandez Moreno 2010-12-14 15:30:01 Re: vacuum a la base de datos???