78 votes

MySQL: Comment insérer un enregistrement pour chaque résultat dans une requête SQL?

Dis que j'ai un select

 SELECT DISTINCT id, customer_id, domain FROM config WHERE type = 'foo';
 

qui renvoie des enregistrements.

Comment puis-je faire une insertion pour atteindre la ligne dans le jeu de résultats comme

 INSERT INTO config (id, customer_id, domain) VALUES (@id, @customer_id, 'www.example.com');
 

@id et @customer_id sont les champs de la ligne dans le jeu de résultats?

edit: je ne voulais pas simplement le dupliquer, mais insérer une nouvelle valeur dans le champ domain place. Néanmoins, une situation facepalm car c'est très simple ;-) Merci!

147voto

krtek Points 15497

Aussi simple que cela:

 INSERT INTO config (id, customer_id, domain) 
SELECT DISTINCT id, customer_id, domain FROM config;
 

Si vous voulez " www.example.com " comme domaine, vous pouvez faire:

 INSERT INTO config (id, customer_id, domain) 
SELECT DISTINCT id, customer_id, 'www.example.com' FROM config;
 

7voto

Ken Points 433
INSERT INTO config (id, customer_id, domain)
SELECT id, customer_id, 'www.example.com' FROM (
  SELECT DISTINCT id, customer_id, domain FROM config
  WHERE type = 'foo'
) x;

5voto

Jeff Fritz Points 5002
 INSERT INTO Config (id, customer_id, domain)
SELECT DISTINCT id, customer_id, 'www.example.com' FROM config
 

La documentation de MySQL pour cette syntaxe est la suivante:

http://dev.mysql.com/doc/refman/5.1/en/insert-select.html

4voto

Sachin Shanbhag Points 20979

EDIT - Après avoir lu les commentaires sur la réponse de @ Krtek.

Je suppose que vous demandez une mise à jour au lieu d'insérer -

 update config set domain = 'www.example.com'
 

Ceci mettra à jour tous les enregistrements existants dans la table de configuration avec le domaine sous la forme 'www.exemple.com' sans créer d'entrées en double.

ANCIENNE REPONSE -

vous pouvez utiliser quelque chose comme -

 INSERT INTO config (id, customer_id, domain)
select id, customer_id, domain FROM config
 

Remarque: - Cela ne fonctionnera pas si vous avez l'ID comme clé primaire

-5voto

Exécutez cette instruction SQL:

 -- Do nothing.
 

Vous voulez sélectionner des lignes distinctes dans "config" et insérer ces mêmes lignes dans la même table. Ils sont déjà là-bas. Rien à faire.

Sauf si vous souhaitez simplement mettre à jour tout ou partie des valeurs de la colonne "domaine". Cela nécessiterait une déclaration UPDATE qui aurait vraiment fait quelque chose.

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