# Einträge aus andere Tabelle übernehmen[SQL]



## Halpha (25. Juni 2011)

Hallo, ich habe eine Tabelle und möchte diese auf eine ander umschreiben. 
Aufbau im groben:
Tabelle 1: 
id, name, category

Tabelle 2:
id, name, category

Das Problem ansich ist schonmal in der Tabelle 2 sind die "name" mehrmals vorhanden und ich bräuchte nur immer einen. 

Beispiel:
Tabelle 2 Eintrag: 

```
1, test, 5
2, test, 5
3, test, 5
```

Dieser soll in Tabelle 1 dann wie folgt stehen: 

```
1, test, 5
```

Ist so ein Query überhaupt möglich oder muss ich das mit PHP lösen? Wäre natürlich mit PHP einfach aber ich würde gern mein sql bissl verbessern. 

Mein erster Ansatz war einmal(funktioniert natürlich nicht):

```
INSERT INTO 
	tabelle1 (name, category)
VALUES (
	(SELECT  name FROM tabelle2), (SELECT category FROM tabelle2))
```

Hier gibt es 2 Probleme, 1. die 2 SELECT abfragen werfen ja gleich immer alle Elemente aus und deshalb kann er sie ja nicht in einen Datensatz schreiben. 2. Problem ist dass er ja alle kopieren würde und nicht nur einen mit dem gleichen namen.

Würde mich über eine Antwort freuen


----------



## vandamp (25. Juni 2011)

Hallo,

was du suchst ist distinct -  damit bekommst du jeden Eintrag, der mehrfach vorhanden ist nur einmal

Denke das Feld id ist ein Auto-increment Feld also sollte es so klappen.


```
INSERT INTO Tabelle2 (iname, category)
SELECT distinct  name, category,
FROM Tabelle1
```


----------



## Halpha (25. Juni 2011)

vandamp hat gesagt.:


> Hallo,
> 
> was du suchst ist distinct -  damit bekommst du jeden Eintrag, der mehrfach vorhanden ist nur einmal
> 
> ...


 
wär die SELECT dann der VALUES? Müsste dann so heissen oder?:


```
INSERT INTO Tabelle1 (id, name, category)
VALUES (SELECT DISTINCT  id, name, category
FROM Tabelle1)
```

die Frage ist dann auch ob er das ganze alles einfügen würde, weil es ja wieder mehr als ein Datensatz ist.


----------



## vandamp (25. Juni 2011)

denke geht auch ohne values, das checkt sql schon, aber du musst die id weglassen, da solltest du in der neuen Tabelle das Feld id auf automatisch um eins weiter zählen einstellen - dann musst du die id nicht angeben.
Am besten du probierst es einmal aus 


```
SELECT DISTINCT  name, category
FROM Tabelle1
```

wirst sehen, jeder Datensatz kommt nur einmal vor.
Zur einfachen Kontrolle kannst du auch noch zum Testen. - hier siehst du dann wie viele Datensätze es mit gleichem Namen und Kategorie es geben würde.


```
SELECT distinct name, category, count(1) as ANZ
FROM Tabelle1
GROUP BY
name, category
```


----------



## Halpha (25. Juni 2011)

Die Anordnung bei meinen Tabellen ist so und so ein bisschen anders. Vor allem umfangreicher. Hab das nur alles sehr vereinfacht dargestellt.

Danke auf jeden Fall. Ich werde das mal alles bissl testen, auch wenn ich es mittlerweile mit php gelöst habe


----------



## luigied (26. Juni 2011)

Hi,

ich würde hier mit einem Select into arbeiten.
http://dev.mysql.com/doc/refman/5.1/de/select-into-statement.html

Das GAnze könnte dann so aussehen:

```
SELECT id, DISTINCT name, category INTO tabelle2 FROM tabelle1;
```

Bin mir hier gerade nicht sicher, ob das Distinct genau dort stehen muss rtfm, aber prinzipiell sollte es so funktionieren. 

mfg LuigiEd


----------



## raiguen (29. Juni 2011)

luigied hat gesagt.:
			
		

> Hi,
> 
> ich würde hier mit einem Select into arbeiten.
> http://dev.mysql.com/doc/refman/5.1/...statement.html
> ...



Ähm...*räusper*  Wenn du schon auf das RTFM verweist, dann dürfte es dir aufgefallen sein, dass ein SELECT INTO NUR in lokale Variablen funktioniert und NICHT in Tabellen; weiterst darf das Abfrageergebnis auch nur eine Zeile zurückgeben!
Lies selbst:


			
				MySql-Referenz hat gesagt.:
			
		

> Diese SELECT-Syntax speichert die ausgewählten Spalten direkt in Variablen. Daher kann nur eine einzige Zeile abgerufen werden.



Wenn du dir nicht ganz sicher bist, ob es funktioniert (sofern man es nicht selbst getestet hat), dann wäre keine Antwort/Posting besser als ein falsches/irreführendes.


----------

