MySQL - Daten von Tabelle zu Tabelle kopieren
Hin und wieder muss man bestimmte Daten aus einer Tabelle in eine andere Tabelle kopieren, oder Updaten. Der umständliche Weg führt meist über eine PHP-Lösung mittels Schleife. Bisher war ich auch zu faul, um nach einer SQL-Lösung zu suchen und auch zu benutzen. Hier einige Möglichkeiten, wie man nur mit SQL bestimmte Daten von Tabelle zu Tabelle kopiert bzw. updated.
Als Test habe ich 2 Tabellen:
test:
+-----------------+
| sp1 | sp2 | sp3 |
+-----------------+
blog_kat:
+-----------------+
| id | name | des |
+-----------------+
Die Tabelle `test` ist dabei noch leer, wobei die Tabelle `blog_kat` schon Daten enthält.
Zunächst die Möglichkeit schnell und einfach eine bestimmte Spalte von `blog_kat` zu `test` zu übertragen.
INSERT INTO test (sp1)
SELECT id FROM blog_kat WHERE id < 10
Hier wird also die Spalte `id` von Tabelle `blog_kat` zur Spalte `sp1` von Tabelle `test` übertragen. Weiterhin werden nur die Daten übertragen, derren ID kleiner 10 ist.
Sollen jetzt mehrere Spalten kopiert werden, dann muss die SQL-Anweisung erweitert werden.
INSERT INTO `test_tabelle` (sp1, sp2)
SELECT id, name FROM `blog_kat` WHERE id < 10
Wichtig dabei ist, dass die Reihenfolge der Ziel-Tabelle (test) gleich der Quell-Tabelle (blog_kat) sein muss. Also in diesem Beispiel wird die 1.Spalte (sp1) der Ziel-Tabelle (test) mit der 1.Spalte (id) der Quell-Tabelle (blog_kat) gefüllt.
Nehmen wir an, dass die Spalte `sp1` der Tabelle `test` gleich der Spalte `id` von Tabelle `blog_kat` ist und die Tabelle `test` also schon gefüllt ist. Dann funktionert ein INSERT nicht mehr, und es muss auf UPDATE zugegriffen werden. Hier gibt es nun eine weitere Möglichkeit um Daten zu kopieren.
UPDATE test AS t SET
t.sp2 = (SELECT name FROM blog_kat WHERE t.sp1 = id)
In Prinzip wird jetzt nur die Spalte `sp2` von Tabelle `test` umgeschrieben, wenn die Spalte `sp1` von Tabelle `test` gleich der Spalte `id` von Tabelle `blog_kat` ist.
Natürlich geht das auch über mehrere Spalten ganz ohne PHP-Schleifen:
UPDATE test AS t SET
t.sp2 = (SELECT name FROM blog_kat WHERE t.sp1 = id),
t.sp3 = (SELECT des FROM blog_kat WHERE t.sp1 = id)
Vielleicht kann es der ein oder andere mal brauchen :)
bisherige Kommentare
1
14.10.2009
Gregor meint dazu:
Super!! hat mir toll geholfen, um in einer Tabelle mit update eine leere Spalte zu füllen.
Besten Dank
Gregor
2
26.11.2009
fallup meint dazu:
danke mir auch
3
29.11.2009
DK3UO meint dazu:
Hi Mario,
MySQL kann aber in der neuesten Versioon auch Replicas direkt austauschen.. ich weiss nur im Moment nichts genaueres, im QRL leigen die Unterlagen dazu.
4
25.08.2010
Oliver meint dazu:
Hat auch mir geholfen
Danke
5
20.12.2011
gruber_adi meint dazu:
jab perfekt!
danke
6
25.04.2012
Zeneca meint dazu:
klasse, danke
neuen Kommentar schreiben
Themen mit ähnlichen Inhalten
- keine weiteren Themen gefunden -
Tags zum Beitrag
datenbank-kopieren