Update einer Zeile

Hi zusammen,
Vorgeschichte:
ich habe eine Tabelle mit bestehenden Kundendaten, deren Mitgliedschaft bis zu einem gewissen Datum gültig ist.
Täglich bekomme ich nun eine File zugeschickt, die alle aktualisierten Kundendaten beinhaltet.
Diese File wird in meine WorkTabelle(hier “meineWorktabelle” genannt) geladen und macht danach entweder Inserts (bei neuen Rows) oder Updates (bei Änderungen) in die Kundentabelle(hier “meine Tabelle” genannt)… Bis dahin läuft auch alles prima.

Nun zum neuen Problem:
Wenn in der besagten File ein Kunde NICHT mehr gelistet ist, dann MUSS er das Gültigkeitsdatum dieses Kunden auf “heute” setzen auch wenn die Gültigkeit > als “heute” ist.


Mein Statement dazu(funkt nicht):
UPDATE meineTabelle
SET GueltigBis = Date
where
not exists (Select * from meineWorktabelle)
and GueltigBis > Date

Irgendwelche Ideen, wie man das einfach handhaben kann?
Danke im voraus.
ullrich

Hast du mal WHERE … NOT IN … probiert?



test=# select * from kunde;
 name | gueltig_bis
------+-------------
 a    | 2020-04-09
 b    | 2020-04-09
 c    | 2020-04-09
(3 rows)

test=*# select * from kunde_import ;
 name
------
 a
 b
(2 rows)

test=*# update kunde k set gueltig_bis = current_date where name not in (select name from kunde_import);
UPDATE 1
test=*# select * from kunde;
 name | gueltig_bis
------+-------------
 a    | 2020-04-09
 b    | 2020-04-09
 c    | 2010-04-09
(3 rows)

Das wird aber dann wohl immer wieder passieren, denn morgen wird der Kunde wieder nicht in Deiner Datei stehen und Du wirst wieder das Datumsfeld updaten.

Alsoe vielleicht so:

update kunde k set gueltig_bis = current_date where name not in (select name from kunde_import) and gueltig_bis > current_date;

Zum SELECT * emfehle ich einen Blick in die FAQ.

Andreas

habs hinbekommen!!!

wenn man sich den eigenen text mal durchliest und dann die antworten dazu, erkennt man, dass das statement eigentlich keinen namen ergibt…


so läufts:

UPDATE meineTabelle xyz
SET GueltigBis = Date
where
NOT Exists
(
SELECT * FROM meineWorktabelle xyz_1
WHERE
xyz.vorname = xyz1.vorname
AND
xyz.nachname= xyz.nachname
)and GueltigBis > Date



;-))))

Falls das produktiver Code ist, dann lese bitte nochmals die FAQ zum Thema select * …


Andreas

Andreas,

danke für den Hinweis! Wenn man in “Eile” kümmert man sich recht wenig um solche Dinge. Aber wenn man dann gegen die Wand fährt ist man schön auf Fehlersuche.

Werde deinen Ratschlag beherzigen.

Gruss Ullrich