Seite 1 von 1

PostgreSQL : 2nd Table zum "updaten"

Verfasst: Mi, 31. Okt 2012 7:58
von AUGE_OHR
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 )