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];