Die letzte Id des Produktes ablesen und eintragen

Rambo21

Aktiver Benutzer
Beiträge
37
Hallo Leute,
Habe folgendes Problem. Ich habe eine Tabelle und lege dort Konten an. Id, Kontonr, VN, NN, Gebdat, Adresse. Nun hat sich die Adresse des Kontoinhabers geändert. D.h. Ich muss wieder eine neue Zeile anlegen mit Id, etc... der neuen Adresse UND zusätzlich eine Spalte mit der letzten Id, zB.

Id | Kontonr | VN | NN | Gebdat | Adresse | CorrId
1 | 12345 | Max | Muster | 01.02.1980 | Maxgasse 1 | NULL
2| 67890| Maria | Lustig | 03.05,1967 | Mariagasse 2 | NULL

die oberen beiden Werte sind nun die Ersteinträge. Jetzt ändert sich die Adresse von Max Muster
3 | 12345 | Max | Muster | 01.02.1980 |Mustergasse 5 | 1 -> Hier kommt 1, da es ID vom letzten Eintrag.

Die Tabelle wird natürlich immer mehr wachsen und wenn Max Muster mal heiratet und den Namen auf Max Bauer ändert, wird es dann so ausschauen.
n | 12345 | Max | Bauer | 01.02.1980 |Mustergasse 5 | 3-> Hier kommt 3, da es ID vom letzten Eintrag.

Die Sache ist jetzt folgendes:
Ich habe eine Initialbefüllung der Daten. sagen wir 100 Konten sind eingespielt.
1 - Wenn ich ein neues Konto angelegt habe, muss ich dieses Konto mit CorrId ist NULL einspielen. D.h. ich muss zuvor in der Tabelle nachschauen, ob das Konto bereits existiert.
2 - Existiert das Konto bereits in der Tabelle, muss ich die letzte ID herausfinden und dies in der Spalte CorrId hinzufügen.

Das ist meine Challenge.

Danke euch für eure Tipps und Hilfe im Voraus.
 
Werbung:
Was genau ist nun die Frage?

Davon abgesehen könntest Du die alten Records in einer extra Tabelle auslagern, du könntest auch ein Datumsbereich dazu speichern, von wann bis wann valid. All das könnte mit einem TRIGGER erfolgen. Ich gehe davon aus, daß die Kontonr hier auch ein PK ist, oder?
 
Hi,
Die Frage ist, wie ich die beiden Punkte verwirklichen kann.

Ich habe eine Initialbefüllung der Daten. sagen wir 100 Konten sind eingespielt.
1 - Wenn ich ein neues Konto angelegt habe, muss ich dieses Konto mit CorrId ist NULL einspielen. D.h. ich muss zuvor in der Tabelle nachschauen, ob das Konto bereits existiert.
2 - Existiert das Konto bereits in der Tabelle, muss ich die letzte ID herausfinden und dies in der Spalte CorrId hinzufügen.

Ja, Kontonr is PK!
 
1. Wenn Du ein neues anlegst, ist es noch nicht vorhanden.
2. wenn sich ein Kunde da ändert dann muß ein Update her, wenn der PK gleich bleibt.

Code:
test=*# insert into kunden  (id, name) values (1, 'max mustermann') on conflict (id) do update set (name,count) = (excluded.name,kunden.count+1);
INSERT 0 1
test=*# select * from kunden ;
 id |  name  | count
----+----------------+-------
  1 | max mustermann |  0
(1 row)

test=*#
test=*#
test=*# insert into kunden  (id, name) values (1, 'max musterfrau') on conflict (id) do update set (name,count) = (excluded.name,kunden.count+1);
INSERT 0 1
test=*# select * from kunden ;
 id |  name  | count
----+----------------+-------
  1 | max musterfrau |  1
(1 row)

Again, speichere die 'alten' daten in eine separaten Logtabelle. Ist einfacher.
 
Werbung:
Aber auch so wie du es im ersten Post beschreibst ist das ja lösbar. Du musst es nur in zwei bis drei Schrotten abarbeiten oder du schreibst einen Trigger oder eine Prozedur die das beim Anlegen eines Datensatzes macht.
 
Zurück
Oben