it-swarm.com.de

MySQL: Wie füge ich einen Datensatz für jedes Ergebnis in eine SQL-Abfrage ein?

Angenommen, ich habe eine Auswahl

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

was einige Datensätze zurückgibt.

Wie mache ich eine Einfügung für die Erreichbarkeitszeile in der Ergebnismenge wie

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

woher @id und @customer_id Sind die Felder der Zeile in der Ergebnismenge?

edit: Ich wollte es nicht nur duplizieren, sondern stattdessen einen neuen Wert in das Feld domain einfügen. Trotzdem eine Facepalm-Situation wie es ganz einfach ist ;-) Danke!

76
acme

So einfach ist das:

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

Falls Sie es wollen "www.example.com "als Domain können Sie:

INSERT INTO config (id, customer_id, domain) 
SELECT DISTINCT id, customer_id, 'www.example.com' FROM config;
143
krtek
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;
7
Ken
INSERT INTO Config (id, customer_id, domain)
SELECT DISTINCT id, customer_id, 'www.example.com' FROM config

Die MySQL-Dokumentation für diese Syntax finden Sie hier:

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

5
Jeff Fritz

EDIT - Nach dem Lesen des Kommentars zu @ Krteks Antwort.

Ich schätze du fragst nach einem Update anstatt einzufügen -

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

Dadurch werden alle vorhandenen Datensätze in der Konfigurationstabelle mit der Domain "www.example.com" aktualisiert, ohne dass doppelte Einträge erstellt werden.

ALTE ANTWORT -

sie können so etwas wie verwenden -

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

Hinweis: - Dies funktioniert nicht, wenn Sie eine ID als Primärschlüssel haben

4
Sachin Shanbhag