# [SQL] Neuer Datensatz mit erhöhter ID ohne Autoincrement



## keb (22. September 2005)

Hi,
ich habe eine etwas doofe Frage. Ich habe noch recht wenig Erfahrung mit SQL und bin deshalb einfach nur ratlos.

Mein Problem ist, dass ich eine Datenbank habe mit 2 Primärschlüsseln ID1 und ID2. Das ganze ist in Access. Ich programmiere jedoch eine Erweiterung mit Visual Basic und da brauche ich SQl Befehle.

Datenbankbeispiel:
ID1 ID2
1 1
1 2

Ich möchte jetzt einen Datensatz einfügen mit ID1=1 und ID2=3. Das ganze soll aber auch mit ID2=4 und so weiter funktionieren.
Sprich ein inkrementieren von ID 2.
Wie bekomme ich max(id2)+1 um es als Wert einzufügen.

Ich habe es bereits mit INSERT INTO versucht. Weiß jedoch nicht wie ich SELECT und VALUE zusammen benutzen kann. Ich vermute es ist ein recht einfaches Problem. Ich setze jetzt allerdings schon gut eine Stunde dran... Jemand ein paar Tipps?

Danke schonmal und ich hoffe, ich habe nichts vergessen.


----------



## Nico Graichen (22. September 2005)

Hi,,
Suchst du das?

```
INSERT INTO mytable SELECT 1, MAX(id2)+1 FROM myTable
```



			
				keb hat gesagt.:
			
		

> Ich habe es bereits mit INSERT INTO versucht. Weiß jedoch nicht wie ich SELECT und VALUE zusammen benutzen kann.
> .


Kurz zur Erklärung:
Wenn du INSERT und SELECT miteinander verbinden willst, müssen alle Werte ins SELECT. Der SELECT-Part ersetzt den VALUES-Part. 
Du musst bei deinem Select jedoch darauf achten, dass die Anzahl der Felder und auch die Datentypen zwischen Quelle und Ziel übereinstimmen


----------



## keb (22. September 2005)

Funktioniert leider so nicht.


```
INSERT INTO mytable SELECT 1, MAX(id2)+1 FROM myTable
```
Da bekomme ich die Fehlermeldung "Kein Zielfeldname in INSERT INTO-Anweisung (1) angegeben".

Deswegen habe ich es mit 

```
INSERT INTO mytable SELECT ID1, MAX(id2)+1 FROM myTable
```
versucht. Soweit ich das verstanden, muss ich nach SELECT die Bezeichner eingeben.
Leider kommt dann die gleiche Fehlermeldung mit (MAX(id2)+1) statt (1).


```
INSERT INTO mytable SELECT ID1, MAX(ID2)+1 FROM myTable WHERE ID1=1
```
Müsste doch eigentlich funktionieren, oder?

Ich denke ich habe etwas unsauber ausgedrückt. ID1 zählt hoch. Zu jedem ID1 gibt es mehrere ID2, die auch hochzählen.
Ich suche zu einer ID1=X die MAX(ID2)+1.
Genaugenommen möchte ich einen neuen Datensatz anlegen mit folgendem Inhalt: ID1=X, ID2=MAX(ID2)+1

Ich habe schon alles mögliche versucht...es klappt nur nicht. Hilfe...


----------



## Nico Graichen (22. September 2005)

Kann jetzt leider jetzt nicht testen, was funktioniert, aber hast du es schon so probiert?


```
INSERT INTO mytable (id1, id2) SELECT id1, MAX(id2)+1 ...
```

oder so:

```
INSERT INTO mytable SELECT id1, MAX(id2) + 1 AS id2 FROM ...
```
oder ein Kombination daraus.

Was anderes Fällt mir jetzt auch nicht ein


----------



## keb (27. September 2005)

Danke. Ich habe das Problem gefunden.

In Acces ist kein echtes SQL.

Der Max Befehl existiert nicht bzw. ich habe sein Pendant nicht gefunden.

Habe das ganze doch noch geschafft zu lösen. Dennoch einen herzlichen Dank


----------

