2011-04-07 11 views
10

Tengo dos tablas y mi objetivo es mover datos específicos de la primera tabla a la segunda tabla junto con un motivo de por qué se movieron esos datos. Por ejemplo:Agregar un valor de columna adicional con INSERTAR ... SELECCIONAR en MySQL

raw_data_table 

SELECT * FROM raw_data_table where id IS NULL; 

me gustaría pasar esto en la segunda tabla, que es idéntica a la primera tabla a excepción de una columna adicional reason. Intenté:

INSERT INTO bad_data_table 
(SELECT * FROM raw_data_table WHERE id IS NULL), "The ID is NULL"; 

Pero esto devuelve un error de sintaxis. ¿Cómo puedo copiar toda la fila y agregar el valor de la razón?

Respuesta

25
INSERT INTO bad_data_table 
SELECT *, 'The ID is NULL' AS Reason 
FROM raw_data_table 
WHERE id IS NULL; 
+7

Me gustaría romper ese '*' en los nombres de columna también. De lo contrario, cuando alguien publique una nueva columna en la tabla 'Reason' las cosas comenzarán a explotar. –

+0

esto no funciona en las declaraciones preparadas –

0

acaba de establecer el valor predeterminado de la columna de la razón como "La identificación es NULL" si todos los datos de esa tabla va a ser nulos de identificación.

O

ejecutar otra consulta sobre la nueva tabla después de mover las filas:

UPDATE bad_data_table SET reason="The ID is NULL" WHERE id is NULL; 
1

Intentar esta consulta:

INSERT INTO bad_data_table VALUES (
(SELECT * FROM raw_data_table WHERE id IS NULL LIMIT 1), "The ID is NULL"); 

La subconsulta aquí tiene que tener 1 fila!

+0

Error - '# 1241 - El operando debe contener 1 columna (s)' –

Cuestiones relacionadas