So ganz klar ist mir die Frage nicht geworden, deshalb habe ich mal verschiedene Antworten ausprobiert. Die Frage ist eigentlich ob:
a) Mehrere Datensätze auf einmal geändert werden sollen ? (UPDATE)
b) Daten in eine leere Tabelle kopiert werden sollen (INSERT .. SELECT )
Code:
CREATE TABLE tabelle1 (
id INT NOT NULL,
spalte1 VARCHAR(50) NOT NULL,
spalte2 VARCHAR(50) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE tabelle2 (
id INT NOT NULL,
spalte1 VARCHAR(50) NOT NULL,
spalte2 VARCHAR(50),
PRIMARY KEY (id)
);
CREATE TABLE tabelle3 (
spalte2 VARCHAR(50)
);
INSERT INTO tabelle1 VALUES
( 1 , 'wert11', 'wert12' ),
( 2 , 'wert21', 'wert22' ),
( 3 , 'wert31', 'wert32' );
INSERT INTO tabelle2 VALUES
( 1 , 'wert11', NULL ),
( 2 , 'wert21', NULL ),
( 3 , 'wert31', NULL );
/* Single Row Update - eine Spalte eines vorhandenen Datensätzes wird geändert */
UPDATE tabelle2
SET spalte2 = ( SELECT spalte2 FROM tabelle1
WHERE spalte1 = 'wert21' )
WHERE spalte1 = 'wert21';
SELECT * FROM tabelle2;
+----+---------+---------+
| id | spalte1 | spalte2 |
+----+---------+---------+
| 1 | wert11 | NULL |
| 2 | wert21 | wert22 | <===
| 3 | wert31 | NULL |
+----+---------+---------+
3 rows in set (0.00 sec)
mysql>
/* Multi Row Insert - neue Datensätze werden eingefügt */
INSERT INTO tabelle3
SELECT spalte2 FROM tabelle1
WHERE spalte1 LIKE 'wert%';
SELECT * FROM tabelle3;
+---------+
| spalte2 |
+---------+
| wert12 |
| wert22 |
| wert32 |
+---------+
3 rows in set (0.00 sec)
mysql>
Vielleicht ist ja was passendes dabei.
Grüße
Thomas