257 votes

MySQL: Comment copier des lignes, mais changer quelques champs?

Je voudrais copier un grand nombre de lignes, mais je dois changer un champ.

Je peux sélectionner les lignes que je veux copier:

 select * from Table where Event_ID = "120"
 

Maintenant, je veux copier toutes ces lignes et en créer de nouvelles en définissant les paramètres Event_ID à 155 . Comment puis-je accomplir cela?

359voto

dcp Points 26928
 INSERT INTO Table
          ( Event_ID
          , col2
           ...
          )
     SELECT "155"
          , col2
           ...
      FROM Table WHERE Event_ID = "120"
 

Ici, le col2, ... représente les colonnes restantes (celles autres que Event_ID) dans votre table.

198voto

C'est une solution où vous avez de nombreux champs de votre table et vous ne voulez pas d'obtenir une crampe au doigt de la saisie de tous les champs, il suffit de taper ceux qui sont nécessaire :)

Comment faire pour copier quelques lignes dans la même table, avec quelques champs ayant des valeurs différentes:

  1. Créer une table temporaire avec toutes les lignes que vous souhaitez copier
  2. Mise à jour de toutes les lignes dans la table temporaire avec les valeurs que vous voulez
  3. Si vous avez un auto incrément de domaine, vous devez le régler à la valeur NULL dans la table temporaire
  4. Copie toutes les lignes de la table temporaire dans votre table d'origine
  5. Supprimer la table temporaire

Votre Code:

CREATE table temporary_table AS SELECT * FROM original_table WHERE Event_ID="155";

UPDATE temporary_table SET Event_ID="120";

UPDATE temporary_table SET ID=NULL

INSERT INTO original_table SELECT * FROM temporary_table;

DROP TABLE temporary_table

Un Scénario Général Code:

CREATE table temporary_table AS SELECT * FROM original_table WHERE <conditions>;

UPDATE temporary_table SET <fieldx>=<valuex>, <fieldy>=<valuey>, ...;

UPDATE temporary_table SET <auto_inc_field>=NULL;

INSERT INTO original_table SELECT * FROM temporary_table;

DROP TABLE temporary_table

53voto

Peter Bailey Points 62125

Disons que votre table avec les deux autres colonnes : foo et bar

12voto

Davethebfg Points 73

Si vous avez des charges de colonnes dans votre tableau et ne souhaitez pas taper sur chacun d’eux vous pouvez le faire en utilisant une table temporaire, comme ;

6voto

Dimitar Points 11

Hey comment va copier tous les champs, de changer l’un d'entre eux à la même valeur + quelque chose d’autre.

??????????

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X