Foros del Web » Soporte técnico » Ayuda General »

tengo un problema en mi consulta sql potsgres quiero restringir registro duplicado

Estas en el tema de tengo un problema en mi consulta sql potsgres quiero restringir registro duplicado en el foro de Ayuda General en Foros del Web. Hola a todo tengo un problema que quiero resolver con ayuda de este foro tengo una base de dato en postgres quiero consultar servicio por ...
  #1 (permalink)  
Antiguo 29/01/2016, 13:20
 
Fecha de Ingreso: diciembre-2014
Ubicación: Curuguaty
Mensajes: 1
Antigüedad: 9 años, 4 meses
Puntos: 0
tengo un problema en mi consulta sql potsgres quiero restringir registro duplicado

Hola a todo tengo un problema que quiero resolver con ayuda de este foro
tengo una base de dato en postgres quiero consultar servicio por grupo de analisis
CREATE TABLE servicio_cab
(
ser_id integer NOT NULL,
ser_doctor integer NOT NULL,
ser_paciente integer,
ser_fecha character varying(100) NOT NULL,
ser_estado character varying(100) NOT NULL,
CONSTRAINT pk_servicio PRIMARY KEY (ser_id ),
CONSTRAINT fk_doctor_servicio FOREIGN KEY (ser_doctor)
REFERENCES doctor (doc_id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT,
CONSTRAINT fk_paciente_servicio FOREIGN KEY (ser_paciente)
REFERENCES paciente (pac_id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT

Este es el detalle de servicio

CREATE TABLE servicio_det
(
serdet_id integer NOT NULL,
serdet_servicio integer NOT NULL,
serdet_analisis integer NOT NULL,
serdet_resultado character varying(100),
serdet_estado character varying(15),
serdet_rango character varying(100),
CONSTRAINT pk_serviciodetalle_ PRIMARY KEY (serdet_id ),
CONSTRAINT fk_serviciodetalle_cabezera FOREIGN KEY (serdet_servicio)
REFERENCES servicio_cab (ser_id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT
)
WITH (
OIDS=FALSE

Esta relacionado con un tipo de analisis clinico

CREATE TABLE analisis
(
ana_id integer NOT NULL,
ana_descripcion character varying(100) NOT NULL,
ana_ambos character varying(100),
ana_grupo_analisis integer NOT NULL,
CONSTRAINT pk_hemograma PRIMARY KEY (ana_id ),
CONSTRAINT fk_grupo_analisis FOREIGN KEY (ana_grupo_analisis)
REFERENCES grupo_analisis (gruana_id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT
)
WITH (
OIDS=FALSE
);
ALTER TABLE analisis

y este a la ves esta relacionado con un grupo de analisis

CREATE TABLE analisis
(
ana_id integer NOT NULL,
ana_descripcion character varying(100) NOT NULL,
ana_ambos character varying(100),
ana_grupo_analisis integer NOT NULL,
CONSTRAINT pk_hemograma PRIMARY KEY (ana_id ),
CONSTRAINT fk_grupo_analisis FOREIGN KEY (ana_grupo_analisis)
REFERENCES grupo_analisis (gruana_id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT
)
WITH (
OIDS=FALSE
);
ALTER TABLE analisis

cada servicio_cab esta relacionado con un paciente y un doctor quien solicita

CREATE TABLE doctor
(
doc_id integer NOT NULL,
doc_nombre character varying(100) NOT NULL,
doc_apellido character varying(100) NOT NULL,
doc_celular character varying(100),
CONSTRAINT pk_doctor PRIMARY KEY (doc_id )
)
WITH (
OIDS=FALSE
);
ALTER TABLE doctor
OWNER TO postgres;


CREATE TABLE paciente
(
pac_id integer NOT NULL,
pac_nombre character varying(100) NOT NULL,
pac_apellido character varying(100) NOT NULL,
pac_celular character varying(100),
CONSTRAINT pk_paciente PRIMARY KEY (pac_id )
)
WITH (
OIDS=FALSE
);
ALTER TABLE paciente
OWNER TO postgres;


Por ende la idea es imprimir en el reporte la descripcion del grupo como titulo inicial
y llenar con el detalle de acuerdo al grupo
Eje:

--------------------------Hemograma---------------------------------------
0001-DET---------0002-ANA-

--------------------------Perfil lipídico---------------------------------------
0001-DET---------0003-ANA-
0002-DET---------0004-ANA-




Esto es el comando que utilizo pero me repite el grupo por cada detalle encuentra el registro de detalle


select ser_id, gruana_id, gruana_descripcion, serdet_id, ana_id, serdet_analisis, serdet_servicio
from grupo_analisis
inner join analisis a ON a.ana_grupo_analisis=gruana_id
inner join servicio_det d ON d.serdet_analisis=a.ana_id
inner join servicio_cab s On s.ser_id=d.serdet_servicio
where s.ser_id=110
  #2 (permalink)  
Antiguo 29/01/2016, 15:25
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: tengo un problema en mi consulta sql potsgres quiero restringir registro d

Cita:
Esto es el comando que utilizo pero me repite el grupo por cada detalle encuentra el registro de detalle
Eso en BBDD no se considera "repetición"...
En BBDD hay repetición cuando todos y cada uno de los campos entre dos registros cualesquiera tienen exactamente el mismo valor en cada uno.
Si al menos hay UN campo cuyo valor difiere entre ambos registros, eso NO ES repetición.

En BBDD los registros devueltos por una consulta se consideran como UNIDADES DE DATOS, es decir, el conjunto completo de datos del registro son una sola cosa.
¿Se entiende?

Si lo que quieres es NO mostrar los datos que son comunes entre los registros, estás pensando en un reporte y no en una consulta. Y los reportes son temas fundamentalmente de programación y no de SQL.
Se crean reportes alimentados por consultas, pero los resultado de una consulta no son reportes. Se requieren herramientas de transformación para obtener un reporte basado en consultas, pero esas herramientas no son parte kernel del SQL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: duplicado, quiero, registro, restringir, sql
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 13:03.