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

Pasar Datos de una columna a otra, diferentes tablas

Estas en el tema de Pasar Datos de una columna a otra, diferentes tablas en el foro de Mysql en Foros del Web. Hola, Tengo dos tablas, las que comparten unas columnas exactamente iguales, y lo quiero es pasar datos de una hacia la otra cuando cumplan una ...
  #1 (permalink)  
Antiguo 01/10/2011, 21:00
Avatar de latinpower  
Fecha de Ingreso: septiembre-2010
Ubicación: Canelones
Mensajes: 116
Antigüedad: 9 años, 1 mes
Puntos: 10
Pasar Datos de una columna a otra, diferentes tablas

Hola,

Tengo dos tablas, las que comparten unas columnas exactamente iguales, y lo quiero es pasar datos de una hacia la otra cuando cumplan una condicion.

ejemplo

Tabla 1
id: 1
nombre: juan
Apellido: perez
edad : 5 años

Tabla 2
id
nombre:
apellido:
trabajo

Y lo que quiero, algo en pseudocodigo es:

insertar tabla2(id, nombre, apellido), values tabla1.nombre, tabla1.apellido from tabla1 where tabla1.id = 1.

Pero me da error Mysql. El problema me lo da primero con el where, dps con el from, y cuando borro esas dos cosas, me dice que por ejemplo tabla1.nombre no existe.
  #2 (permalink)  
Antiguo 01/10/2011, 22:02
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.318
Antigüedad: 11 años, 10 meses
Puntos: 2653
Respuesta: Pasar Datos de una columna a otra, diferentes tablas

Si no existen en la segunda tabla y el ID debe copiarse:
Código MySQL:
Ver original
  1. INSERT tabla2(id, nombre, apellido)
  2. SELECT id, nombre, apellido
  3. FROM tabla1
  4. WHERE id = 1;
Si el ID se genera automáticamente en la segunda tabla:

Código MySQL:
Ver original
  1. INSERT tabla2(nombre, apellido)
  2. SELECT nombre, apellido
  3. FROM tabla1
  4. WHERE id = 1;
Si el registro existe, pero deben actualziarse datos:

Código MySQL:
Ver original
  1. UPDATE tabla2 INNER JOIN tabla1 ON tabla2.id = tabla1.id
  2. SET tabla2.nombre = tabla1.nombre, tabla2.apellido = tabla1.apellido
  3. WHERE id = 1;
__________________
¿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 02/10/2011, 21:46
Avatar de latinpower  
Fecha de Ingreso: septiembre-2010
Ubicación: Canelones
Mensajes: 116
Antigüedad: 9 años, 1 mes
Puntos: 10
Respuesta: Pasar Datos de una columna a otra, diferentes tablas

Muchas gracias por contestar.

Tengo otra duda, si por ejemplo quisiera, a parte de copiar columnas, agregar más datos?, todo en el mismo insert?

INSERT tabla2(nombre, apellido, dia_semana)
SELECT nombre, apellido
FROM tabla1
WHERE id = 1;

donde tendría que poner el valor de día semana?. porque probé con poner values y encerrar todo el select entre () y después ponerle más valores separados con coma, pero no me dejo, me decía que el operando debía tener una columna/s

PD: ese valor es independiente, no es de la tabla1.
  #4 (permalink)  
Antiguo 03/10/2011, 04:07
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.318
Antigüedad: 11 años, 10 meses
Puntos: 2653
Respuesta: Pasar Datos de una columna a otra, diferentes tablas

Para poder insertar un registro así se usa lo mismo que para poder insertar cualquier registro en cualquier tabla: Sólo puede ir un valor por columna. Por lo que me dices, estás haciendo una subconsulta para devolver el valor de una columna, lo que es una pésima práctica y sólo se hace como último recurso.
En principio, ese valor va en el SELECT, como tercera columna, pero sin saber de dónde y cómo lo obtienes, no puedo decirte exactamente cómo hacerlo.
Postea la consulta completa que intentaste usar.
__________________
¿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 04/10/2011, 15:36
Avatar de latinpower  
Fecha de Ingreso: septiembre-2010
Ubicación: Canelones
Mensajes: 116
Antigüedad: 9 años, 1 mes
Puntos: 10
Respuesta: Pasar Datos de una columna a otra, diferentes tablas

Acá tengo el procedimiento
Código MySQL:
Ver original
  1.  
  2.   /*Copio los datos de una tabla a la otra*/
  3.   INSERT jugadores(nombre, apellido, ci, fecha_nacimiento, usuario, contrasena, mail)
  4.   SELECT nombre, apellido, ci, fecha_nacimiento, username, contraseña, mail FROM solicitudes WHERE id_solicitudes = @id_solicitud;
  5.  
  6.   /*Actualizo la fecha de ingreso*/
  7.   set id = last_insert_id();
  8.  
  9.   update jugadores set fecha_ingreso = date(now()) where idjugadores = @id;

Yo lo que quisiera hacer es poder introducir date(now()) en el primer insert, sin tener que usar update luego...
  #6 (permalink)  
Antiguo 04/10/2011, 16:55
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.318
Antigüedad: 11 años, 10 meses
Puntos: 2653
Respuesta: Pasar Datos de una columna a otra, diferentes tablas

Mira, son varios los errores de tu procedimiento, y en realidad hay una forma muchísimo más simple de hacer lo que quieres.
Por empezar, MySQL tiene dos tipos de variables que se pueden usar para contener valores en un stored procedure, las variables locales de procedimiento y las variables de usuario. Tu estás usando ambas sin saber que son diferentes; esto es: "id" y "@id" son para MySQL variables distintas.

Las variables locales se crean con DECLARE en un procedimiento, funcion o trigger, pero sólo se identifican por su nombre, sin otro atributo o prefijo. Sólo existen durante el procedimiento y mueren cuando este termina. id es en tu contexto una variable local.

Por su parte, las variables de usuario no se declaran, se inicializan porque carecen te tipo de dato y valen NULL al inicio, se identifican porque llevan un prefijo "@" al inicio y dependen de la conexión del usuario que las crea. Su valor permanece constante una vez que se termina de usarla y sólo cambia cuando se le hace una nueva asignación de valor. Como dependen de la conexión, cuando esta se cierra o reinicia, mueren. En tu contexto, "@id" es una variable de usuario.

Tiene que quedarte claro que @id e id son variables distintas.

Así, pues:
- En el SELECT del INSERT...SELECT, cuando usas @id estás comparando en realidad el usario_id con NULL, porque no le has asignado ningún valor a @id.
- Cuando le asignas el LAST_INSERT_ID() a id, no se lo estás poniendo a @id.
- Finalmente, al hacer el UPDATE, nuevamente comparas el id de la tabla con NULL.

De todos modos, nada de esto es necesario, porque si lo que quieres es poner la fecha del día de hoy en el campo fecha_ingreso de la tabla "jugadores", simplemente tendrías que hacer:

Código MySQL:
Ver original
  1. INSERT jugadores(nombre, apellido, ci, fecha_nacimiento, usuario, contrasena, mail, fecha_ingreso)
  2. SELECT nombre, apellido, ci, fecha_nacimiento, username, contraseña, mail, CURDATE()
  3. FROM solicitudes;

En este caso no tiene ningún sentido usar el DATE(NOW()), si ya existe una función que devuelve la fecha sin hora, como CURDATE().
__________________
¿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: columna, sql, tabla, tablas
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 03:08.