PostgreSQL : 2nd Table zum "updaten"

Alles zum SQL-Dialekt

Moderator: Moderatoren

PostgreSQL : 2nd Table zum "updaten"

Beitragvon AUGE_OHR » Mi, 31. Okt 2012 8:58

hi,

ich habe ein nettes Beispiel für folgende Situation im PG-Forum gefunden
http://www.pg-forum.de/sql/6476-csv-datei-mit-copy-einlesen.html#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
Benutzeravatar
AUGE_OHR
Marvin
Marvin
 
Beiträge: 10280
Registriert: Do, 16. Mär 2006 8:55
Wohnort: Hamburg

Zurück zu SQL (Sprache)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast