[GELÖST] Daten in einer View durch Daten aus anderer Tabelle ersetzen

Hallo liebes Forum,

ich bin PostgreSQL-Neuling und möchte folgendes Problem lösen:
Ich habe eine View erstellt auf der Grundlage einer Tabelle, die zum Teil falsche Daten enthält. Diese falschen Daten möchte ich mit den Korrekturdaten aus einer anderen Tabelle selektiv ersetzen.
Ich probiere den UPDATE-Befehl aus, aber irgendetwas ist noch falsch an meinem Code. Es läuft nicht.

Wie kann ich das Problem besser lösen?

Vielen Dank vorab für die Unterstützung.
mfg
Mike

Die erstellte View heißt: vw_korrektur_teams_kapa

SELECT
team_id, team_name, pi, value
FROM im_teams_kapa

UPDATE vw_korrektur_teams_kapa
SET value = tkk.value
FROM teams_kapa_korrekturen tkk
JOIN vw_korrektur_teams_kapa ktk on ktk.pi = tkk.pi and ktk.team_id = tkk.team_id
WHERE ktk.pi = tkk.pi and ktk.team_id = tkk.team_id

ich denke, Du kommst eher zum Ziel, wenn Du auf Deinen View mit den falschen Daten und der Korrekturtabelle wieder einen neuen View erstellst - und nicht versuchst, den View upzudaten.

Habe ich dann nicht in der neuen View das gleiche Problem?

kannst Du denn eine Abfrage erstellen, die ein korrektes Resultat liefert?

im Moment noch nicht. Die Ursprungstabelle ist teilweise falsch. Die Korrekturtabelle enthält aber nur die zu korrigierenden Datensätze, nicht alle.

hilft dir das weiter?

edb=*# select * from wrong_data ;
 id | data 
----+------
  1 |   10
  2 |   20
  3 |    3
  4 |   40
(4 rows)

edb=*# select * from korrektur ;
 id | data 
----+------
  3 |   30
(1 row)

edb=*# with x as (select w.id, w.data from wrong_data w left join korrektur k on w.id = k.id) select x.id, coalesce(k.data, x.data) from x left join korrektur k on x.id=k.id;
 id | coalesce 
----+----------
  3 |       30
  1 |       10
  2 |       20
  4 |       40
(4 rows)

edb=*#

Das sieht ziemlich gut aus! Ich probiere es gleich mal aus. Dankeschön!

Funktioniert hervorragend! Nochmal vielen Dank!

Dieses Thema wurde automatisch 60 Tage nach der letzten Antwort geschlossen. Es sind keine neuen Antworten mehr erlaubt.