CREATE TABLE LIKE A1 as A2

Je veux créer une nouvelle table avec les propriétés d’une ancienne table et sans doublons. Je veux faire quelque chose comme ça:

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

Mais ce qui précède ne fonctionne pas. S’il vous plaît, quelqu’un peut-il le modifier pour qu’il fonctionne?

Votre tentative n’était pas si mauvaise. Vous devez le faire avec LIKE , oui.

Dans le manuel, il est écrit:

Utilisez LIKE pour créer une table vide basée sur la définition d’une autre table, y compris les atsortingbuts de colonne et les index définis dans la table d’origine.

Donc vous faites:

 CREATE TABLE New_Users LIKE Old_Users; 

Ensuite, vous insérez avec

 INSERT INTO New_Users SELECT * FROM Old_Users GROUP BY ID; 

Mais vous ne pouvez pas le faire en une seule déclaration.

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

Qu’en est-il de:

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

et si cela ne fonctionne pas, il suffit de sélectionner une ligne et de tronquer après la création:

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

MODIFIER:

J’ai remarqué votre commentaire ci-dessous sur le besoin d’index, etc. Essayez:

 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; 

Ça devrait le faire. Il semble que vous faites cela pour se débarrasser des doublons? Dans ce cas, vous souhaiterez peut-être placer un index unique sur id. si c’est une clé primaire, cela devrait déjà être en place. Tu peux soit:

 #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); 

Pour MySQL, vous pouvez le faire comme ceci:

 CREATE TABLE New_Users SELECT * FROM Old_Users group by ID; 

CREATE TABLE new_table LIKE old_table;

ou tu peux l’utiliser

CREATE TABLE new_table en tant que SELECT * FROM old_table WHERE 1 GROUP BY [colonne pour supprimer les doublons par];