MySQL - Copiar columna de una tabla a otra.

 
Vista:

Copiar columna de una tabla a otra.

Publicado por Carlos.Fdez (3 intervenciones) el 20/07/2015 20:33:37
Hola.
Soy novato en mysql y tengo que hacer una sentencia que me está volviendo loco, a ver si alguien me puede ayudar.
Tengo una tabla A con "n" registros y dos columnas FechaHora, Presion1 y otra tabla B con "x" registros con FechaHora y Presion2.
Quiero copiar toda la columna Presion2 de la tabla B y añadirla en la tabla A.
De tal manera que me queden todos los registros y las Columnas FechaHora, Presion1, Presion2.

A se me olvidava, N siempre será => que X.
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
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Copiar columna de una tabla a otra.

Publicado por leonardo_josue (414 intervenciones) el 21/07/2015 17:08:02
Hola Carlos.Fdez:

Vayamos por partes,

1. La tabla A, ya contiene la columna en donde se van a copiar los datos de la tabla B?, si no es así, entonces lo primero que tienes que hacer es un ALTER TABLE para agregar esa columna, checa la documentación oficial de MySQL para la sintaxis, o si utilizas algún IDE como Workbench, puedes hacerlo de manera "visual".

2. ¿Cómo están relacionadas tus tablas? es decir, ¿cómo sabes qué registro de la tabla B debe ir en qué registro de la tabla A?... desde el momento en que comentas que hay mas registros en tu tabla A que en tu tabla B hay un problema.

3. Postea algunos datos de ejemplo de tus tablas y a partir de esos datos dinos qué es lo que esperas obtener como resultado.

4. El pasar información de una columna a otra, se reduce a hacer un UPDATE-SET, ya sea con subconsultas o con JOIN's, es decir, algo como esto:

1
2
3
4
5
UPDATE tablaA SET presion2 = (aquí pones una subconsulta para buscar el valor que le corresponde a cada registro)
 
o
 
UPDATE tablaA INNER JOIN tablaB On aquí pones las condiciones de union SET tablaA.presion2 = tablaB.presion2

Checa esta liga, creo que te puede ser de utilidad:

http://isaacsalgado.com/2011/11/24/mysql-update-con-inner-join/

Y también puedes checar la documentación oficial de MySQL

https://dev.mysql.com/doc/refman/5.0/en/update.html

En la parte de los comentarios hay algunos ejemplos (como el de James Goatcher) que hacen exactamente lo mismo que lo que tú necesitas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Copiar columna de una tabla a otra.

Publicado por Carlos.Fdez (3 intervenciones) el 22/07/2015 19:55:29
Hola Leonardo.
Gracias por la respuesta.
1. Ya he realizado el alter table y tengo la columna vacia.
2. En un principio, las tablas tienen que tener el mismo numero de registros. Yo sólo quiero colocar la columna emperzando por el primer registro.
3. OK
4
Actualmente tengo esto:
update backup.otprueba As Destino inner join ot11326.dlq02 As Fuente SET Destino.Caudal02= Fuente.Caudal02;
Parece que funciona pero me da algun problemilla
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Copiar columna de una tabla a otra.

Publicado por leonardo_josue (414 intervenciones) el 23/07/2015 00:43:08
Hola de nuevo Carlos.Fdez:

1
2
3
4
5
Actualmente tengo esto:
 
update backup.otprueba As Destino inner join ot11326.dlq02 As Fuente SET Destino.Caudal02= Fuente.Caudal02;
 
Parece que funciona pero me da algun problemilla;

Tienes un detalle con el INNER JOIN, y es que no estás colocando la cláusula ON, por lo tanto se está realizando un producto cartesiano entre tus tablas, checa este ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
mysql> SELECT * FROM tabla1;
+------+-------------+
| id_1 | descripcion |
+------+-------------+
|    1 | uno         |
|    2 | dos         |
|    3 | tres        |
+------+-------------+
3 rows in set (0.00 sec)
 
mysql> SELECT * FROM tabla2;
+------+-------------+
| id_1 | descripcion |
+------+-------------+
|    1 | one         |
|    2 | two         |
|    3 | three       |
+------+-------------+
3 rows in set (0.00 sec)

Supongamos que quieres relacionar ambas tablas, de la manera en que tú lo estás haciendo, tienes lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
mysql> SELECT *
    -> FROM tabla1
    -> INNER JOIN tabla2;
+------+-------------+------+-------------+
| id_1 | descripcion | id_1 | descripcion |
+------+-------------+------+-------------+
|    1 | uno         |    1 | one         |
|    2 | dos         |    1 | one         |
|    3 | tres        |    1 | one         |
|    1 | uno         |    2 | two         |
|    2 | dos         |    2 | two         |
|    3 | tres        |    2 | two         |
|    1 | uno         |    3 | three       |
|    2 | dos         |    3 | three       |
|    3 | tres        |    3 | three       |
+------+-------------+------+-------------+
9 rows in set (0.00 sec)

Lo mismo pasa con el UPDATE, al no colocar la cláusula ON esto es lo que pasa. Lo que tienes que hacer es agregar la o las relaciones que tengas entre tus dos tablas, de tal manera que te quede esto:

1
2
3
4
5
6
7
8
9
10
11
mysql> SELECT *
    -> FROM tabla1
    -> INNER JOIN tabla2 ON tabla1.id_1 = tabla2.id_1;
+------+-------------+------+-------------+
| id_1 | descripcion | id_1 | descripcion |
+------+-------------+------+-------------+
|    1 | uno         |    1 | one         |
|    2 | dos         |    2 | two         |
|    3 | tres        |    3 | three       |
+------+-------------+------+-------------+
3 rows in set (0.00 sec)

haz la prueba y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Copiar columna de una tabla a otra.

Publicado por Carlos.Fdez (3 intervenciones) el 23/07/2015 08:48:01
Hola.
He puesto la clausula "ON" y Funciona. ¿es posible que me desordene los registros?
Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de SuperIndio
Val: 102
Bronce
Ha aumentado 1 puesto en MySQL (en relación al último mes)
Gráfica de MySQL

Copiar columna de una tabla a otra.

Publicado por SuperIndio (79 intervenciones) el 21/07/2015 18:00:34
lo resolvi asi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Drop Table TTCA ;
 
Create Table TTCA (
FechaHora     Varchar (16)  Not Null,
Presion1      Varchar (10)  Not Null,
Presion2      Varchar (10)  Not Null,
Primary Key( FechaHora ) );
 
Drop Table TTCB ;
 
Create Table TTCB (
FechaHora     Varchar (16)  Not Null,
Presion2      Varchar (10)  Not Null,
Primary Key( FechaHora ) );
 
Insert Into TTCA ( FechaHora, Presion1, Presion2 ) Values ( '20150612 091212', '07675', '');
Insert Into TTCA ( FechaHora, Presion1, Presion2 ) Values ( '20150612 091201', '08805', '');
Insert Into TTCA ( FechaHora, Presion1, Presion2 ) Values ( '20150612 091205', '09089', '');
Insert Into TTCA ( FechaHora, Presion1, Presion2 ) Values ( '20150612 101212', '11074', '');
Insert Into TTCA ( FechaHora, Presion1, Presion2 ) Values ( '20150612 110116', '12362', '');
Insert Into TTCA ( FechaHora, Presion1, Presion2 ) Values ( '20150612 110521', '09243', '');
Insert Into TTCA ( FechaHora, Presion1, Presion2 ) Values ( '20150612 121232', '16134', '');
Insert Into TTCA ( FechaHora, Presion1, Presion2 ) Values ( '20150612 131623', '27226', '');
Insert Into TTCA ( FechaHora, Presion1, Presion2 ) Values ( '20150612 152134', '18327', '');
Insert Into TTCA ( FechaHora, Presion1, Presion2 ) Values ( '20150612 153238', '09429', '');
Insert Into TTCA ( FechaHora, Presion1, Presion2 ) Values ( '20150612 162337', '16520', '');
Insert Into TTCA ( FechaHora, Presion1, Presion2 ) Values ( '20150612 163436', '24611', '');
 
 
Insert Into TTCB ( FechaHora, Presion2 ) Values ( '20150612 091212', '67567' );
Insert Into TTCB ( FechaHora, Presion2 ) Values ( '20150617 091201', '80580' );    -- X
Insert Into TTCB ( FechaHora, Presion2 ) Values ( '20150618 091205', '08908' );    -- X
Insert Into TTCB ( FechaHora, Presion2 ) Values ( '20150612 101212', '07407' );
Insert Into TTCB ( FechaHora, Presion2 ) Values ( '20150611 110116', '36236' );    -- X
Insert Into TTCB ( FechaHora, Presion2 ) Values ( '20150612 110521', '24324' );
Insert Into TTCB ( FechaHora, Presion2 ) Values ( '20150612 121232', '13413' );
Insert Into TTCB ( FechaHora, Presion2 ) Values ( '20150614 131623', '22622' );    -- X
Insert Into TTCB ( FechaHora, Presion2 ) Values ( '20150612 152134', '32732' );
Insert Into TTCB ( FechaHora, Presion2 ) Values ( '20150612 153238', '42942' );
Insert Into TTCB ( FechaHora, Presion2 ) Values ( '20150610 162337', '52052' );    -- X
Insert Into TTCB ( FechaHora, Presion2 ) Values ( '20150612 163436', '61161' );
 
Commit ;
 
Select FechaHora, Presion1, Presion2  FROM TTCA  ;
Select FechaHora, Presion2 FROM TTCB  ;
 
Update TTCA A,
       TTCB B Set A.Presion2 = B.Presion2
 Where A.FechaHora = B.FechaHora ;
 
Select FechaHora, ' ', Presion2 From TTCB
 Where FechaHora NOT IN( Select Distinct FechaHora From TTCA ) ;
 
Insert Into TTCA ( FechaHora, Presion1, Presion2 )
          Values ( Select FechaHora, ' ', Presion2
                     From TTCB
                    Where FechaHora NOT IN( Select Distinct FechaHora From TTCA ) ) ;
 
Select FechaHora, Presion1, Presion2 FROM TTCA;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar