Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

MySql - Realizar un UPDATE de varios campos a partir de un SELECT

Estas en el tema de MySql - Realizar un UPDATE de varios campos a partir de un SELECT en el foro de Mysql en Foros del Web. Hola!! Les pido si me pueden ayudar!! Tengo la tabla 1 y la tabla 2: tabla1 codigo_examen---------descripcion 1--------------------------a 2--------------------------b 3--------------------------c tabla2 Legajo_alumno-----------nombre 100------------------------Juan 101------------------------Pedro A ...
  #1 (permalink)  
Antiguo 04/11/2011, 18:35
 
Fecha de Ingreso: octubre-2011
Ubicación: Buenos Aires
Mensajes: 84
Antigüedad: 12 años, 6 meses
Puntos: 2
Pregunta MySql - Realizar un UPDATE de varios campos a partir de un SELECT

Hola!! Les pido si me pueden ayudar!!

Tengo la tabla 1 y la tabla 2:


tabla1
codigo_examen---------descripcion
1--------------------------a
2--------------------------b
3--------------------------c

tabla2
Legajo_alumno-----------nombre
100------------------------Juan
101------------------------Pedro

A partir de estas 2 tablas quiero escribir una consulta que me arroje los siguientes datos en la tabla 3:

tabla3
legajo_alumno-----------nombre----------codigo_examen------descripcion
100------------------------Juan-------------1----------------------a
100------------------------Juan-------------2----------------------b
100------------------------Juan-------------3----------------------c
101------------------------Pedro------------1----------------------a
101------------------------Pedro------------2----------------------b
101------------------------Pedro------------3----------------------c


Y por ultimo necesito escribir una query que me actualice la tabla 3 en caso de que modifique algun dato de la tabla 1 o 2.

Muchas gracias y saludos!!
  #2 (permalink)  
Antiguo 04/11/2011, 20:06
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, 4 meses
Puntos: 2658
Respuesta: MySql - Realizar un UPDATE de varios campos a partir de un SELECT

Lo que te conviene en ese caso no es crear una tercera tabla, o hacer actualizaciones. Lo que realmente te conviene es crear una vista (VIEW), a la que puedas consultar.
De ese modo la información estaría siempre actualizada respecto de las dos tablas base.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 05/11/2011, 14:59
 
Fecha de Ingreso: octubre-2011
Ubicación: Buenos Aires
Mensajes: 84
Antigüedad: 12 años, 6 meses
Puntos: 2
Respuesta: MySql - Realizar un UPDATE de varios campos a partir de un SELECT

Hola, ahi logre que se cree la tabla 3 con esta query:

"INSERT INTO tabla3 (legajo_alumno,nombre,codigo_examen_descripcion)
SELECT tabla2.legajo_alumno, tabla2.nombre, tabla1.codigo_examen, tabla1.descripcion FROM tabla1, tabla2;"

Lo que ocurre es que todo esta linkeado a una pagina PHP donde se van cargando las notas de cada alumno a la tabla 3, quedando asi:

tabla3
legajo_alumno-----------nombre----------codigo_examen------descripcion-----nota
100------------------------Juan-------------1----------------------a----------------7
100------------------------Juan-------------2----------------------b----------------6
100------------------------Juan-------------3----------------------c----------------4
101------------------------Pedro------------1----------------------a----------------8
101------------------------Pedro------------2----------------------b----------------9
101------------------------Pedro------------3----------------------c----------------5

Es por esto que necesito que la tabla 3 este creada. El problema es actualizar esta tabla 3 si cambio algun dato de la tabla 1 o 2, o si pór ejemplo agrego mas "legajos de alumnos".

¿Como puedo hacer esto?? Gracias!!
  #4 (permalink)  
Antiguo 05/11/2011, 15:21
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, 4 meses
Puntos: 2658
Respuesta: MySql - Realizar un UPDATE de varios campos a partir de un SELECT


¿Entendiste lo que te propuse, acerca de que no necesitas tantas complicaciones, sino una VIEW?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 05/11/2011, 15:23
 
Fecha de Ingreso: octubre-2011
Ubicación: Buenos Aires
Mensajes: 84
Antigüedad: 12 años, 6 meses
Puntos: 2
Respuesta: MySql - Realizar un UPDATE de varios campos a partir de un SELECT

¿Pero haciendo una view, voy a poder insertar las notas en la tabla 3 desde la pagina php?
  #6 (permalink)  
Antiguo 05/11/2011, 15:36
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, 4 meses
Puntos: 2658
Respuesta: MySql - Realizar un UPDATE de varios campos a partir de un SELECT

¿La tabla 3 no es el resultado de las tablas 1 y 2?

En ese contexto lo que no tiene ningún sentido ni utilidad es que exissta es tabla 3, ya que el contenido es el resultado de un select sobre las otras...
Sería más sencillo que cargases los datos en las otras y usases una vista creada como:
Código MySQL:
Ver original
  1. CREATE VIEW Tabla3 AS
  2.     tabla2.legajo_alumno,
  3.     tabla2.nombre,
  4.     tabla1.codigo_examen,
  5.     tabla1.descripcion
  6. FROM tabla1, tabla2;
Y luego un
Código MySQL:
Ver original
  1. FROM Tabla3
Ten en cuenta que mantener una tercera tabla con los datos de otras dos implica problemas eventuales de consistencia e integridad de información. Es una mala práctica.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 05/11/2011, 15:53
 
Fecha de Ingreso: octubre-2011
Ubicación: Buenos Aires
Mensajes: 84
Antigüedad: 12 años, 6 meses
Puntos: 2
Respuesta: MySql - Realizar un UPDATE de varios campos a partir de un SELECT

Ahora entiendo! Te hago la ultima consulta:
Yo necesito para cada alumno cargarle la nota del examen que haya dado.

En este contexto, ¿se puede hacer un update sobre la vista de tabla3 creada?
  #8 (permalink)  
Antiguo 05/11/2011, 16:24
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, 4 meses
Puntos: 2658
Respuesta: MySql - Realizar un UPDATE de varios campos a partir de un SELECT

MySQL no tiene vistas editables, pero si estás ingresando las notas, en todo caso el INSERT lo haces en la tabla que guarda las notas, no en la vista que integra ambas.
A mi entender, por lo poco que describes del modelo de datos que estás planeando, esa tabla no tiene sentido de existir si los datos provienen de las otras dos. Son esas tablas las que debes actualizar.
pero puede ser que lo que falte es una buena descripción de lo que estás haciendo...
¿Por qué no nos describes un poco el esquema de datos que estás trabajando? ¿Son los exámenes de un instituto educativo? ¿Es el esquema de cursada de asignaturas?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 05/11/2011, 16:41
 
Fecha de Ingreso: octubre-2011
Ubicación: Buenos Aires
Mensajes: 84
Antigüedad: 12 años, 6 meses
Puntos: 2
Respuesta: MySql - Realizar un UPDATE de varios campos a partir de un SELECT

La pagina que estoy queriendo armar es para llevar un registro de las notas de los alumnos de una colegio, y que cada alumno pueda ver su nota en esta pagina.
  • Por un lado tengo una lista de alumnos, con sus legajos. Los alumnos varian año a año, e incluso pueden variar mes a mes por nuevos ingresos.
  • Por otro lado tengo una lista de examenes. Cada uno tiene un codigo. Esta lista de examenes tambien se actualiza, agregando mas examenes o incluso modificando la descripcion de alguno que ya estaba cargado.
  • El objetivo es que los profesores le puedan cargar a cada alumno, y para cada examen, la nota correspondiente.

No se si es correcta la forma en que estoy diagramando las tablas. ¿Que me sugeris?
Mi idea era crear la vista de la tabla 3 para poder cargar las notas a cada alumno y para cada examen.

Gracias
  #10 (permalink)  
Antiguo 05/11/2011, 18:35
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, 4 meses
Puntos: 2658
Respuesta: MySql - Realizar un UPDATE de varios campos a partir de un SELECT

El esquema que planteas es bastante simple en realidad, porque se trata de un ejercicio muy común en el cursado de Base de Datos de cualquier carrera de informática. Es casi el TP Nro. 1...

La cosa es mas o menos así:

- Alumno
- Profesor
- Asignatura (cada curso o materia distinta que se puede dar)
- Cursada (un registro por cada asignatura que se da en un año o período determinado)
- Comision (relaciona Profesor con Cursada, por lo que establece quién da qué asignatura)
- Alumno_Comision (tabla relacional que vincula una comisión con los Alumno, poniendo un registro por cada alumno inscripto en cada comisión)
- Examen (contiene un registro por cada examen tomado en cada asignatura, pero sólo para determinar la fecha de realización)
- Alumno_Examen (Vinculada a Alumno_Comision y a Examen, con un registro por cada alumno que se presentó en el examen, contiene también la nota)

Puede requerirse alguna tablas más, pero al menos ese es el esquema.

Ahora bien, insertar una nota de un alumno nunca se hace en la tabla que visualizas. Tienes que comprender que no es lo mismo lo que ves en la aplicación que lo que guardas en la base. Eso es una de las cosas que los programadores raramente entienden al principio: El modelo de interfases de usuario y el modelo de datos son cosas completamente independientes. El que veas la información en una tabla no implica, a nivel de base de datos, que esa tabla realmente exista.
Las tablas en pantalla son representaciones visuales para que el usuario lego entienda lo que debe poner o conseguir, pero las tablas de la base de datos tienen por objeto almacenar de forma segura y consistente información que peude ser usada luego para ser presentada de diversas formas. Diversas formas. Por eso la aplicación debe ser independiente del modelo de datos.
El modelo de datos debe proveer a la aplicación de la información que requiere, pero una no es espejo de la otra.

¿Se entienden estos conceptos?

Para tu caso, con un esquema de al menos 8 tablas, puedes proveer al sistema de datos en forma de tablas con diferentes presentaciones, con el mismo esquema, y sólo a través de consultas o vistas.
Para el caso, como dije, en la pantalla el profesor ingresará los datos en la forma que quieras, pero luego, en la aplicación (el code behind), debes hacer que esos datos ingresados se guarden en las tablas correctas. Eso es lo que debes hacer pro programación, y luego, simplemente volviendo aleer la vista, puedes presentar en pantalla los datos actualizados...

Así es como se trabajan todas las aplicaciones que conoces y que usan bases de datos relacionales.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 07/11/2011, 14:08
 
Fecha de Ingreso: octubre-2011
Ubicación: Buenos Aires
Mensajes: 84
Antigüedad: 12 años, 6 meses
Puntos: 2
Respuesta: MySql - Realizar un UPDATE de varios campos a partir de un SELECT

Gracias por tu respuesta. Lo encare de esa forma, pero ahora hay una vista que no se como realizar.

Estas son las tablas que cree:


tabla1: listado de todos los examenes
codigo_examen----------------descripcion
1------------------------------a
2------------------------------b
3------------------------------c

tabla2: listado de todos los alumnos que deberian realizar los examenes de la tabla 1
Legajo_alumno----------------nombre
100--------------------------Juan
101--------------------------Pedro

tabla3: listado de notas y de codigo_examen de solo los alumnos que realizaron el examen.
legajo_alumno-----------nombre----------codigo_examen------------------Nota
100------------------------Juan---------------1------------------------------7
100------------------------Juan---------------3------------------------------9
101------------------------Pedro-------------1------------------------------8
101------------------------Pedro-------------2------------------------------6

Yo necesito crear una vista que me muestre todos los examenes de la tabla 1 con todas las notas de los alumnos, incluso aquellos que no rindieron. Algo asi:

Vistax: listado de notas y de codigo_examen de los alumnos que realizaron el examen y de los que no:
legajo_alumno-----------nombre----------codigo_examen------------------Nota
100------------------------Juan----------------1-----------------------------7
100------------------------Juan----------------2-----------------------------
100------------------------Juan----------------3-----------------------------9
101------------------------Pedro--------------1-----------------------------8
101------------------------Pedro--------------2-----------------------------6
101------------------------Pedro--------------3-----------------------------

Esta es la vista que no me esta saliendo.

Muchas gracias!
  #12 (permalink)  
Antiguo 07/11/2011, 14:54
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, 4 meses
Puntos: 2658
Respuesta: MySql - Realizar un UPDATE de varios campos a partir de un SELECT

En estos días preguntaron algo parecido...
La respuesta es que no puedes hacer un JOIN implícito, sino que debes hacerlo por medio de un LEFT JOIN sobre el campo relacional.
El problema es que te traerá la tablas como la quieres,pero no incluirá el "codigo_examen" de los exámenes no rendidos, porque en la tabla respectiva no existen. Eso solamente lo puedes completar proramáticamente.
__________________
¿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: campos, query, select, tabla, update
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 14:56.