2012-04-13 8 views
38

Quiero crear una nueva tabla con propiedades de una tabla anterior y sin duplicados. Quiero hacer algo como esto:CREAR TABLA COMO A1 como A2

CREATE TABLE New_Users LIKE Old_Users, 
AS 
(SELECT * FROM Old_Users GROUP BY ID) ; 

Pero lo anterior no está funcionando. Por favor, ¿alguien puede modificarlo para que funcione?

+0

Tenga en cuenta que el uso de 'LIKE' también hará que la nueva tabla tenga índices similares. – Nav

Respuesta

69

Su intento no fue tan malo. Tienes que hacerlo con LIKE, sí.

En el manual que dice:

Uso desea crear una tabla vacía basada en la definición de otra tabla , incluyendo cualquier atributo de columna e índices definidos en la tabla original .

por lo que:

CREATE TABLE New_Users LIKE Old_Users; 

A continuación, se inserta con

INSERT INTO New_Users SELECT * FROM Old_Users GROUP BY ID; 

pero no se puede hacerlo en un comunicado.

+0

la instrucción LIKE debe estar en parens: CREATE TABLE New_Users (LIKE Old_Users); – Marcao

+0

No, no es necesario. – fancyPants

+2

Tienes razón, no lo es. Lo siento. – Marcao

1

Basado en http://dev.mysql.com/doc/refman/5.0/en/create-table-select.html

¿Qué hay de:

Create Table New_Users Select * from Old_Users Where 1=2; 

y si eso no funciona, sólo tiene que seleccionar una fila y truncar después de la creación:

Create table New_Users select * from Old_Users Limit 1; 
Truncate Table New_Users; 

EDIT:

Noté su comentario a continuación sobre la necesidad de índices, etc. Pruebe:

show create table old_users; 
#copy the output ddl statement into a text editor and change the table name to new_users 
#run the new query 
insert into new_users(id,name...) select id,name,... form old_users group by id; 

Eso debería hacerlo. Parece que estás haciendo esto para deshacerse de los duplicados. En ese caso, es posible que desee poner un índice único en la identificación. si es una clave principal, esto ya debería estar en su lugar. Puede:

#make primary key 
alter table new_users add primary key (id); 
#make unique 
create unique index idx_new_users_id_uniq on new_users (id); 
+0

@AshBurlaczenko, mira el enlace que publiqué en la respuesta, muchos ejemplos en los documentos de mysql sin especificación de tabla. Puedo ver que necesita una especificación para que la primera funcione ya que no hay datos, pero el segundo ejemplo funcionará a menos que sus documentos estén equivocados. –

+0

Necesito una tabla nueva para tener las mismas propiedades, como la tabla anterior – Jigberto

+0

, uso el segundo ejemplo y luego ejecuto "describe new_users;", ¿qué es diferente? –

1

Para MySQL, puede hacerlo de esta manera:

CREATE TABLE New_Users SELECT * FROM Old_Users group by ID; 
+0

Hola, sí, creando una tabla nueva, pero necesito que esta nueva tabla tenga las mismas propiedades que la tabla anterior. – Jigberto

+0

Depende de la documentación de mysql, no puede conservar índices, PK, etc. Pero puede definir índices como mysql documantation tells. http://dev.mysql.com/doc/refman/5.0/en/create-table-select.html CREAR TABLA ... SELECT no crea automáticamente ningún índice para usted. Esto se hace intencionalmente para que la declaración sea lo más flexible posible. Si desea tener índices en la tabla creada, debe especificarlos antes de la instrucción SELECT: mysql> Barra CREATE TABLE (UNIQUE (n)) SELECT n FROM foo; –

0

CREAR TABLA new_table LIKE old_table;

o u puede utilizar este

crear la tabla new_table como SELECT * FROM old_table WHERE 1 GROUP BY [columna para eliminar duplicados por];

Cuestiones relacionadas