Das Forentreffen 2018 findet am 20./21. April in Dresden statt. Weitere Infos hier
Anmeldungen zum Forentreffen 2018 sind auf der Anmeldeseite möglich
Zur Homepage des Deutschsprachige Xbase-Entwickler e. V.
Xbase++-Wiki des Deutschsprachige Xbase-Entwickler e. V.

PostgreSQL : 2nd Table zum "updaten"

Alles zum SQL-Dialekt

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 10655
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

PostgreSQL : 2nd Table zum "updaten"

Beitrag von AUGE_OHR » Mi, 31. Okt 2012 7:58

hi,

ich habe ein nettes Beispiel für folgende Situation im PG-Forum gefunden
http://www.pg-forum.de/sql/6476-csv-dat ... #post31854
Es handelt sich um neue Datensaetze (ergo neuer PK) und leider auch um Datensätze, welche ein UPDATE erfordern (PK existiert).
als Antwort kam nun das

Code: Alles auswählen

test=# select * from ziel;
 id |    name
----+-------------
  1 | ads
  2 | akretschmer
(2 rows)

test=*# select * from quelle;
 id |  name
----+---------
  2 | andreas
  3 | tamara
(2 rows)

test=*# insert into ziel select * from quelle where id not in (select id from ziel);
INSERT 0 1
test=*# update ziel set name = (select name from quelle where ziel.id=quelle.id) where id in (select id from quelle);
UPDATE 2
test=*# select * from ziel;
 id |  name
----+---------
  1 | ads
  2 | andreas
  3 | tamara
(3 rows)
ok so funktioniert es schon ... aber man kann es noch "optimieren"
Die erste Query, also das Insert, könnte man mittels JOIN wohl optimieren:

Code: Alles auswählen

insert into ziel select q.*  from quelle q left join ziel z on (q.id=z.id) where z.id is null;
Ähnlich könnte man das Update auch optimieren, ich überlasse Dir das mal zur Übung. Du kannst schauen, was EXPLAIN bzw XPLAIN ANALYSE dazu meint.
Frage : wie müsste man "Update" mittels "inner JOIN" modifizieren ? ( die Antwort steht da leider nicht )
gruss by OHR
Jimmy

Antworten