Informe de tres tablas sin multiplicar registros

Tengo tres tablas, la primera se llama nombre y tiene tres campos, nombre, id y dni. La segunda se llama tensión y tiene tre campos id, fecha y tension_alta_baja, y la tercera tabla se llama peso y tiene tres campos id fecha y peso.

Las fechas de la tabla tensión y y las fechas de la tabla son aleatorias y no son apareadas.

Cómo lo monto para poder hacer informes (mediante consultas) y que no se me multipliquen los registros.

Es más, con una tabla de pesos, otra de tensiones y otra de datos biográficos con el campo común id, cómo lo hago para poder hacer informes.

2 respuestas

Respuesta
2

Tienes que relacionar las tablas por el campo común (id), luego creas una consulta sobre las tres tablas, con los campos que te interese mostrar de cada una, y por último el informe sobre esa consutla.

Pero lo más importante es que las tablas estén relacionadas, y además, bien relacionadas.

El problema es que me crea registros duplicados 

¿A qué le llamas registros duplicados?

Si tu tabla nombre tienes un registro así: 1-> Juan->11111111A

Y en la tabla tensión tienes los registros:

1->01/10/2016->Tension Alta

1->01/11/2016->Tension Baja

Al hacer una consutla sobre las dos tablas obtendrás:

1-> Juan->11111111A->01/10/2016->Tension Alta

1-> Juan->11111111A->01/11/2016->Tension Baja

Pero no son registros duplicados.

Si tienes registros duplicados, lo más probable es que tengas mal diseñada la consulta o la estructura de tus tablas.

con esta estructura de de consulta, si en la misma fecha no hay peso y tensión (no van apareadas), sino que por ejemplo varios pesos y sólo uno de tensiones, entonces se duplican los valores de las tensiones. te pongo otro pantallazo de como  me sale la tabla. (te la he llevado aun excel para editar los nombre y poner pepe)

El resultado que obtienes es el lógico, según lo que te explicaba en el mensaje anterior: tendrás "repetido" los datos de t_pperarios por cada registro en t_pesos, y al añadir la otra tabla, relacionada solo con t_pperarios, tendrás un "repetido" del par "Operario-Peso" por cada registro de t_tensión.

Puedes hacer una cosa, para que no se te desmadre:

1º/ Ya que las dos tablas t_peso y t_tension tienen la misma estructura, puedes crear una consulta de unión de ambas, por ejemplo esta:

SELECT TPeso.idusuario, "Peso" AS Medida, TPeso.FPesos AS Fecha, TPeso.Kilos AS Valor
FROM TPeso
UNION ALL SELECT TTension.idusuario, "Tension" AS Medida, TTension.FTension AS Fecha, TTension.Tension  AS Valor
FROM TTension;

Verás que he añadido un "campo" Medida que toma el valor Peso o Tension según de que tabla venga el valor, y le he cambiado los nombres a los campos fecha y peso/tension mediante un alias, para que sean uniformes.

2º/ Creas tu consulta definitiva sobre la tabla t_operario y la consulta anterior, relacionándolas por el idoperario:

SELECT TOperarios.IDoperario, TOperarios.Nombre, TOperarios.DNI, CAux.Medida, CAux.Fecha, CAux.Valor
FROM TOperarios INNER JOIN CAux ON TOperarios.IDoperario = CAux.idusuario;

Te adjunto el ejemplo:  http://filebig.net/files/sSBix7FLE9 . La consulta COriginal es como la que tienes tu ahora mismo, CAux es la consulta de union (punto 1) y CDefinitiva la consulta del punto 2, sin duplicados.

Un saludo


Muchas gracias por tu eficacia y prontitud. Tu solución es lo que necesitaba. 

No obstante a ver si fuera posible poner una tercera tabla de medicación en la consulta de unión para el informe. La estructura de la tabla es un poco diferente porque tiene dos fechas.

De todas formas , para registrar el peso, la tensión y la medicación de un grupo de sujetos,  no se te ocurre hacerlo de otra manera?

Un montón de gracias

T

e mando otro pantallazo con la tabla de medicación

Cuando haces una consulta de unión, tienes que tener en todas las consultas los mismos campos, y si no los tienes, crearlos como "campo ficticio" (similar a lo que hice con el campo "Medida")

En tu caso, en las dos primeras consultas tendrías que añadir un campo FechaFin a las dos consultas previas, u omitir ese campo de la tercera tabla.

La forma de añadir esa tabla a la consulta de unión es la misma: añades un UNION ALL al final de la consulta y el SELECT con los campos.

La única forma que se me ocurre sería tener todo en una tabla, por ejemplo T_Visitas, y en ella tener todos esos campos y rellenar el/los que correspondan a la visita. Así tendrías un paciente y muchas visitas, pero cada una será única.

¡Gracias! Por compartir tus conocimientos. Me ha sido muy útil. Lo del campo ficticio, no lo conocía y me puede ser muy útil. También me estoy planteando tu sugerencia de hacer una tabla única como tú me dices T_visitas con los campos

Id_usuario, fecha inicio, fecha final tipo (ahí puedo poner peso, tensión o medicación ) y valor. Conforme lo voy escribiendo me va gustando más esta opción.. Repito las gracias

No dejes de puntuar la respuesta.

La tabla única yo también creo que es la mejor opción.

Un saludo


Respuesta
1

Estoy de acuerdo con Sveinbjorn El Rojo, a mi me ayudo muchísimo en la base de datos que hice

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas