values into ejemplo columns mysql select insert-into

ejemplo - mysql insert into select



INSERT INTO... SELECT para todas las columnas MySQL (4)

¿no necesitas double () para el bit de valores? si no, prueba esto (aunque debe haber una mejor manera)

insert into this_table_archive (id, field_1, field_2, field_3) values ((select id from this_table where entry_date < ''2001-01-01''), ((select field_1 from this_table where entry_date < ''2001-01-01''), ((select field_2 from this_table where entry_date < ''2001-01-01''), ((select field_3 from this_table where entry_date < ''2001-01-01''));

Estoy tratando de mover datos viejos de:

this_table >> this_table_archive

copiando todas las columnas Lo he intentado, pero no funciona:

INSERT INTO this_table_archive (*) VALUES (SELECT * FROM this_table WHERE entry_date < ''2011-01-01 00:00:00'');

Nota: las tablas son idénticas y tienen id establecido como clave principal.


Además de la respuesta de Mark Byers:

A veces también desea insertar detalles de codificación rígida, de lo contrario puede haber una restricción única, etc. Por lo tanto, utilice los siguientes en una situación en la que anule algunos valores de las columnas.

INSERT INTO matrimony_domain_details (domain, type, logo_path) SELECT ''www.example.com'', type, logo_path FROM matrimony_domain_details WHERE id = 367

Aquí el valor del dominio es agregado por mí en forma codificada para deshacerse de la restricción Única.


La sintaxis correcta se describe en el manual . Prueba esto:

INSERT INTO this_table_archive (col1, col2, ..., coln) SELECT col1, col2, ..., coln FROM this_table WHERE entry_date < ''2011-01-01 00:00:00'';

Si las columnas de identificación son una columna de incremento automático y usted ya tiene algunos datos en ambas tablas, en algunos casos puede omitir el ID de la lista de columnas y generar nuevos identificadores para evitar insertar un ID que ya existe en el original. mesa. Si su tabla objetivo está vacía, esto no será un problema.


Para la sintaxis, se ve así (omita la lista de columnas para significar implícitamente "todo")

INSERT INTO this_table_archive SELECT * FROM this_table WHERE entry_date < ''2011-01-01 00:00:00''

Para evitar errores de clave primaria si ya tiene datos en la tabla de archivo

INSERT INTO this_table_archive SELECT t.* FROM this_table t LEFT JOIN this_table_archive a on a.id=t.id WHERE t.entry_date < ''2011-01-01 00:00:00'' AND a.id is null # does not yet exist in archive