# Spalten von einer Tabelle in neue kopieren



## kesnw (29. März 2004)

Hi,

ich muss meine bisherige Tabelle leider splitten und muss manche Datensätze in meine neue Tabelle übernehmen. 

Meine bisherige Tabelle A besitzt die Spalten A1 und A2. Diese beiden Spalten möchte ich komplett (natürlich mit Inhalt) in meine neue Tabelle B mit den Spaltennamen B1 und B2 kopieren.

Wie mache ich das?


----------



## Thomas Darimont (29. März 2004)

Hallo!

Schau mal hier:


```
mysql> select * from tab1;
+------+------+
| a1   | a2   |
+------+------+
|    1 |    1 |
|    2 |    2 |
|    3 |    3 |
|    4 |    4 |
|    5 |    5 |
|    6 |    6 |
|    8 |    8 |
|    9 |    9 |
+------+------+
8 rows in set (0.00 sec)

mysql> create table tab2 as select a1 "B1", a2 "B2" from tab1;
Query OK, 8 rows affected (0.05 sec)
Records: 8  Duplicates: 0  Warnings: 0

mysql> select * from tab2;
+------+------+
| B1   | B2   |
+------+------+
|    1 |    1 |
|    2 |    2 |
|    3 |    3 |
|    4 |    4 |
|    5 |    5 |
|    6 |    6 |
|    8 |    8 |
|    9 |    9 |
+------+------+
8 rows in set (0.00 sec)
```

Gruß Tom


----------



## kesnw (29. März 2004)

klasse, danke, das ist schonmal nicht schlecht.

Was ist nun aber wenn die Tabelle und die Spalten schon vorhanden sind? Kannst du mir da bitte noch helfen? Die Daten können dabei keinesfalls verloren gehen oder soll ich vorher sichern?


----------



## Thomas Darimont (29. März 2004)

Hallo!

Schau mal hier:


```
mysql> select * from tab3;
+------+------+
| c1   | c2   |
+------+------+
|   10 |   10 |
|   11 |   11 |
|   12 |   12 |
|   13 |   13 |
|   14 |   14 |
+------+------+
5 rows in set (0.00 sec)

mysql> select * from tab2;
+------+------+
| B1   | B2   |
+------+------+
|    1 |    1 |
|    2 |    2 |
|    3 |    3 |
|    4 |    4 |
|    5 |    5 |
|    6 |    6 |
|    8 |    8 |
|    9 |    9 |
+------+------+
8 rows in set (0.03 sec)

mysql> insert into tab2 select c1 "B1", c2 "B2" from tab3;
Query OK, 5 rows affected (0.00 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> select * from tab2;
+------+------+
| B1   | B2   |
+------+------+
|    1 |    1 |
|    2 |    2 |
|    3 |    3 |
|    4 |    4 |
|    5 |    5 |
|    6 |    6 |
|    8 |    8 |
|    9 |    9 |
|   10 |   10 |
|   11 |   11 |
|   12 |   12 |
|   13 |   13 |
|   14 |   14 |
+------+------+
13 rows in set (0.00 sec)
```

Gruß Tom


----------



## kesnw (29. März 2004)

super, das wird hinhauen.

du scheinst dich ja gut auszukennen, hab noch folgendes problem. ich habe zwei spalten A und B, die ZUSAMMEN als key agieren sollen. A kann also mehrmals vorkommen und B ebenfalls, nur zusammen können die Werte nur einmal vorkommen. Wie lege ich das an

Danke schonmal für die Unterstützung


----------



## Thomas Darimont (29. März 2004)

Hallo!

Siehe:


```
mysql> CREATE TABLE tab4(
    -> a INT NOT NULL,
    -> b INT NOT NULL,
    -> PRIMARY KEY (a,b));

mysql> insert into tab4 values (1,1);
Query OK, 1 row affected (0.03 sec)

mysql> insert into tab4 values (2,1);
Query OK, 1 row affected (0.00 sec)

mysql> insert into tab4 values (1,1);
ERROR 1062: Duplicate entry '1-1' for key 1

mysql> insert into tab4 values (1,2);
Query OK, 1 row affected (0.00 sec)

mysql> insert into tab4 values (1,2);
ERROR 1062: Duplicate entry '1-2' for key 1
```

Gruß Tom


----------



## kesnw (29. März 2004)

Klasse, danke dir Jetzt kanns losgehen. hast mir sehr weitergeholfen


----------



## kesnw (29. März 2004)

Sorry, doch noch ein Problem.

Folgende Fehlermeldung:
Column count doesn't match value count at row 1

Mein PHP-Script lautet:

```
$update="insert into points select L_ID 'L_ID', owner 'owner', einschaetzung 'einschaetzung', point_1 'point_1', point_2 'point_2', point_3 'point_3', point_4 'point_4', kennzahlen 'kennzahlen', kenn_1 'kenn_1', risiko 'risiko', risk_1 'risk_1', risk_2 'risk_2', risk_3 'risk_3', risk_4 'risk_4', risk_5 'risk_5' from vendors";
mysql_query($update) or die ("Error in query: $update. " . mysql_error());
```

Die Tabelle vendors hat viel mehr Spalten, ich möchte aber nur diese kopieren...


----------

