2011-06-24 18 views
17

Tengo una tabla, vamos a llamarla tabla1, y los datos en dos de las columnas se han destruido.Actualización de MySQL con sub selección

Afortunadamente tengo una copia de seguridad anterior de la tabla.

En la copia de seguridad anterior, los valores de las dos columnas en cuestión son correctos, pero el resto de las columnas están desactualizados por lo que no puedo simplemente importar todo el volcado.

Así que en su lugar lo he importado a otra tabla a la que llamaré table2. Cada registro tiene una identificación que es la misma en ambas tablas.

Así que, básicamente, necesito una consulta que pasará por cada registro en la tabla1 y actualizar la columna1 y la columna2 con los valores correspondientes de la tabla2.

+0

¿Por qué no simplemente crea dos columnas en la tabla 1 e importa los datos de las columnas correspondientes de la tabla 2? –

Respuesta

41

tabla original es tabla1 y tabla de copia de seguridad es tabla2

UPDATE table1 t1 JOIN table2 t2 ON t1.id = t2.id 
SET t1.col1 = t2.col1, t1.col2 = t2.col2, ... 
+0

Esta es la forma correcta de hacerlo. La actualización de varias tablas puede ser muy útil http://dev.mysql.com/doc/refman/5.1/en/update.html –

14

Esto funciona en todas las versiones de base de datos SQL:

update table1 t set 
column1 = (select column1 from old_table where id = t.id), 
column2 = (select column2 from old_table where id = t.id); 

No hay necesidad de ninguna función especial/agregado, porque el partido Identificación del golpeará exactamente una fila.

+0

Mejor respuesta si quiere trabajar con estructuras de tablas totalmente diferentes. – Soullivaneuh

1

Creo que se puede intentar algo como esto:

UPDATE table1 SET table1field = (SELECT MAX(table2.table2field) FROM table2 WHERE table1.table1field = table2.table2field) 
0

estoy correr por debajo de consulta, pero que dará error # 1093

UPDATE `mentor2122017`.`users` SET language_id = 
    (SELECT GROUP_CONCAT(ul.language_id) FROM `mentor2122017`.`users` u 
    left join `mentor`.`user_language` ul ON u.id = ul.users_id 
    where 
    ul.language_id is not null GROUP by ul.users_id) 
Cuestiones relacionadas