Dis que j'ai un choix
SELECT DISTINCT id, customer_id, domain FROM config WHERE type = 'foo';
qui renvoie des enregistrements.
Comment puis-je faire un insert pour la ligne de portée dans le jeu de résultats comme
INSERT INTO config (id, customer_id, domain) VALUES (@id, @customer_id, 'www.example.com');
où @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
à la place. Néanmoins, une situation face à face car c'est tout simplement facile ;-) Merci!
Aussi simple que cela:
INSERT INTO config (id, customer_id, domain)
SELECT DISTINCT id, customer_id, domain FROM config;
Si tu veux "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;
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;
INSERT INTO Config (id, customer_id, domain)
SELECT DISTINCT id, customer_id, 'www.example.com' FROM config
La documentation MySQL pour cette syntaxe est ici:
MODIFIER - Après avoir lu le commentaire 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'
Cela mettra à jour tous les enregistrements existants dans la table de configuration avec le domaine comme "www.example.com" sans créer de doublons.
ANCIENNE RÉPONSE -
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 id comme clé primaire