Vorhandenen Wert ersetzen aus einer anderen Tabelle

Buckybarnes

Neuer Benutzer
Beiträge
2
Hallo zusammen,

ich befasse mich erst seit wenigen Tagen mit SQL und stehe vor folgendem Problem: Ich habe zu einem Personalstamm mehrere Tabellen. In den beiden Tabellen um die es geht, ist die ID immer einer Person zugeordnet.
- In Tabelle A werden Abteilungswechsel eingetragen, daher taucht die ID hier in der ersten Spalte mehrfach auf.
- In Tabelle B stehen die allg. Stammdaten. Hier steht die ID immer nur einmal.

In beiden Tabellen gibt es eine Spalte ab Datum (Eintrittsdatum des MA). Irgendwie ist es bei einigen Mitarbeitern dazu gekommen, dass das ab Datum in Tabelle B abweicht. Ich möchte mit einem Befehl die Werte des ältesten Datums aus Tabelle A in Tabelle B aus den in Tabelle A übernehmen.

Das ganze sieht ungefähr so aus.





Tabelle A
IDAB_DATUMBIS_DATUM ABT
11998-01-04 2001-07-15 Einkauf
12001-07-162010-08-25 Buchhaltung
12010-08-26NULLPersonal


Tabelle B


IDAB_DATUMBIS_DATUMANREDE
12001-07-16NULL1
21995-03-01NULL2
 
Zuletzt bearbeitet:
Werbung:
rein prinzipiell ist das das falsche rangehen, Du kannst bei der Abfrage aus der Tabelle B (Stammdate) das älteste Datum mit aus Tabelle A abfragen, damit ist das Feld in Stammdaten überflüssig. Nennt man redundant. Du kannst das auch via UPDATE machen, hast dann aber keine Garantie, daß es übermorgen noch immer valide ist.
 
Code:
edb=*# create table stammdaten (id int primary key, ab date); 
CREATE TABLE
edb=*# create table wechsel(mitarbeiter int references stammdaten, ab date);
CREATE TABLE
edb=*# insert into stammdaten (id) values (1);
INSERT 0 1
edb=*# insert into stammdaten (id) values (2);
INSERT 0 1
edb=*# insert into wechsel values (1, '2021-01-01');
INSERT 0 1
edb=*# insert into wechsel values (1, '2022-01-01');
INSERT 0 1
edb=*# insert into wechsel values (2, '2022-01-01');
INSERT 0 1
edb=*# select * from stammdaten;
 id | ab 
----+----
  1 | 
  2 | 
(2 rows)

edb=*# select * from wechsel;
 mitarbeiter |         ab         
-------------+--------------------
           1 | 01-JAN-21 00:00:00
           1 | 01-JAN-22 00:00:00
           2 | 01-JAN-22 00:00:00
(3 rows)

edb=*# update stammdaten set ab = tmp.datum from (select mitarbeiter, max(ab) as datum from wechsel group by mitarbeiter) tmp where stammdaten.id = tmp.mitarbeiter;
UPDATE 2
edb=*# select * from stammdaten;
 id |         ab         
----+--------------------
  1 | 01-JAN-22 00:00:00
  2 | 01-JAN-22 00:00:00
(2 rows)

Wie gesagt, schlechte Idee, Begründung siehe oben.
 
Werbung:
Zurück
Oben