PostgreSQL - Problemas de subquery

   
Vista:

Problemas de subquery

Publicado por Virginia (8 intervenciones) el 29/09/2008 17:44:41
Buenos días, quisiera que alguien me orientara respecto a lo siguiente, tengo este query

SELECT distinct a.tx_numero, a.tx_tipo, a.tx_medio, d.tx_descrip as estatus,
CASE WHEN a.fe_fecha_rev NOTNULL
THEN (SELECT (c.tx_nombre ||' '|| c.tx_apellido)
FROM inventario.d016t_solicitud a, inventario.i014t_usuario c
WHERE (c.co_usuario = a.nu_co_user_rev) LIMIT 1)
END as user_rev,
CASE WHEN a.fe_fecha_rech NOTNULL
THEN (SELECT (c.tx_nombre ||' '|| c.tx_apellido)
FROM inventario.d016t_solicitud a, inventario.i014t_usuario c
WHERE (c.co_usuario = a.nu_co_user_rech) LIMIT 1)
END as user_rech,
CASE WHEN a.fe_fecha_aprob NOTNULL
THEN (SELECT (c.tx_nombre ||' '|| c.tx_apellido)
FROM inventario.d016t_solicitud a, inventario.i014t_usuario c
WHERE (c.co_usuario = a.nu_co_user_aprob) LIMIT 1)
END as user_aprob,
(c.tx_apellido||' '||c.tx_nombre) as solicitante,
to_char(a.fe_fecha_solic, 'DD-MM-YYYY') as fe_solic,
a.nu_co_user_rev, a.nu_co_user_aprob, a.nu_co_user_rech,
to_char(a.fe_fecha_aprob, 'DD-MM-YYYY') as fe_aprob,
to_char(a.fe_fecha_rev, 'DD-MM-YYYY') as fe_rev,
to_char(a.fe_fecha_rech, 'DD-MM-YYYY') as fe_rech
FROM inventario.d016t_solicitud a,
inventario.i014t_usuario c, inventario.i008t_status d
WHERE a.nu_co_status = d.co_status and
a.nu_co_user_solic = c.co_usuario
ORDER BY a.tx_numero

El problema es que para cada

(SELECT (c.tx_nombre ||' '|| c.tx_apellido)
FROM inventario.d016t_solicitud a, inventario.i014t_usuario c
WHERE (c.co_usuario = a.nu_co_user_rev) LIMIT 1)

me trae siempre el primer registro que consigue y no necesariamente es el coincide con la condición c.co_usuario = a.nu_co_user_rev y si le quito el LIMIT trae múltiples filas y no me muestra nada como resultado del query...
Cómo puedo resolver esto??

la estructura de las tablas es la siguiente:

CREATE TABLE inventario.d016t_solicitud
(
co_solicitud integer NOT NULL DEFAULT nextval(('inventario.d016t_solicitud_co_solicitud_seq'::text)::regclass), -- Código
nu_co_user_solic integer NOT NULL, -- Código del Uasuario solicitante
nu_co_user_rev integer, -- Código del Usuario revisor
nu_co_user_aprob integer, -- Código del Usuario que aprueba
nu_co_status integer NOT NULL, -- Estatus de la Solicitud
nu_tip_solicita integer NOT NULL, -- Tipo de solicitante 1.Equipo 2.Area 3.Mantenimiento 4.Proveedor (alquiler)
nu_reg_solicita integer NOT NULL, -- Código del solicitante
tx_numero text NOT NULL, -- Número de la solicitud
fe_fecha_solic date NOT NULL, -- Fecha de la solicitud
fe_fecha_rev date, -- Fecha de revisión
fe_fecha_aprob date, -- Fecha de aprobación
tx_tipo character varying(1) NOT NULL, -- Tipo solicitud (Urgente, Normal, Emergencia)
tx_medio character varying(1) NOT NULL, -- Midio de la solicitud (R)adio, (F)ax, (C)orreo, (P)ersonal, (T)eléfono
tx_observacion text, -- Observaciones
nu_co_user_rech integer, -- Usuario que rechaza la solicitud...
fe_fecha_rech date, -- Fecha de rechazo de la solicitud
CONSTRAINT d016pk_solicitud PRIMARY KEY (co_solicitud),
CONSTRAINT d016fk_i008t_status FOREIGN KEY (nu_co_status)
REFERENCES inventario.i008t_status (co_status) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT d016fk_i014t_usuario FOREIGN KEY (nu_co_user_solic)
REFERENCES inventario.i014t_usuario (co_usuario) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)

CREATE TABLE inventario.i014t_usuario
(
co_usuario integer NOT NULL DEFAULT nextval(('inventario.i014t_usuario_co_usuario_seq'::text)::regclass), -- Código del usuario
tx_nombre character varying(30) NOT NULL, -- Nombre del usuario
tx_apellido character varying(30) NOT NULL, -- Apellido del usuario
tx_cedula character varying(11) NOT NULL, -- Cédula del usuario
tx_direc text NOT NULL, -- Dirección del usuario
tx_telfs text NOT NULL, -- Telefonos del usuario
tx_email character varying(20) NOT NULL, -- Email del usuario
nu_co_grupo integer NOT NULL, -- Código del grupo
nu_co_cargo integer NOT NULL, -- Código del cargo
nu_co_status integer NOT NULL, -- Código del estatus
tx_login character varying(15) NOT NULL, -- Login del usuario
tx_clave text NOT NULL DEFAULT 123456, -- Clave del usuario
nu_co_planchada integer NOT NULL, -- Código de la planchada a la que pertenece
CONSTRAINT i014pk_usuario PRIMARY KEY (co_usuario),
CONSTRAINT i014fk_i004t_planchada FOREIGN KEY (nu_co_planchada)
REFERENCES inventario.i004t_planchada (co_planchada) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT i014fk_i008t_status FOREIGN KEY (nu_co_status)
REFERENCES inventario.i008t_status (co_status) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT i014fk_i012t_cargo FOREIGN KEY (nu_co_cargo)
REFERENCES inventario.i012t_cargo (co_cargo) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT i014fk_i013t_grupo FOREIGN KEY (nu_co_grupo)
REFERENCES inventario.i013t_grupo (co_grupo) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
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