Update von Tabellen in verschiedenen Schemas

Hallo,

habe in einer DB firma zwei Schemas, a und b.
Die Tabelle personen im Schema a hat die Felder name, vorname, id.
Die Tabelle pruefer im Schema b hat die Felder name, vorname, id.
Wobei die Tab b.pruefer eine Teilmenge der Tab a.personen enthält und
die id aus a.personen nach b.pruefer übernommen werden soll.

Mein Ansatz dazu ist :

UPDATE firma.b.pruefer
SET id = personen.id
FROM firma.a.personen
WHERE (personen.name = pruefer.name AND personen.vorname = pruefer.vorname);

Leider tut er nichts: Abfrage war erfolgreich durchgeführt: 0 Zeilen, 15 ms Ausführungszeit.

Wo ist hier mein Denkfehler?
Gruß Holger

Laß mal die Angabe der DB (also firma.) weg.

Andreas

Leider der gleiche “Fehler”
Abfrage war erfolgreich durchgeführt: 0 Zeilen, 16 ms Ausführungszeit.

Was liefert denn folgende Abfrage:

SELECT count(*)
FROM b.pruefer, a.personen 
WHERE (personen.name = pruefer.name AND personen.vorname = pruefer.vorname);

test=# update b.pruefer b set id = a.id from a.personen a where ((a.name, a.vorname) = (b.name,b.vorname));

sollte tun, was du willst.

Andreas

Gesamtlaufzeit der Abfrage: 16 ms.
1 Zeilen geholt.

Heißt das, er hat nur den ersten Datensatz bearbeitet?

Und welche Zahl steht in dem Ergebnis?

count bigint 0

Das bedeutet, dass es in Deinen Tabellen keine Einträge gibt, die die Bedingung

(personen.name = pruefer.name AND personen.vorname = pruefer.vorname)

erfüllen. Und deswegen hat der UPDATE auch keine Datensätze geändert.

Du hattest recht. Beim Export der Tabelle pruefer aus MS Access hatte er auch
“unsichtbare” Leerzeichen mit übernommen.
Die Feldlänge für name ist character varying (35) und alles was über die Buchstaben des
Namens hinausgeht wurden mit Leerzeichen aufgefüllt.
Wie bekomme ich diese jetzt heraus?



psql (9.1beta1)
Type "help" for help.

test=# select 'x' || ' bla fasel   ' || 'y';
    ?column?
-----------------
 x bla fasel   y
(1 row)

test=# select 'x' || trim(' bla fasel   ') || 'y';
  ?column?
-------------
 xbla fasely
(1 row)

Der Rest ist ein normales UPDATE.


Andreas



UPDATE personen
   SET name = trim(name), 
   vorname = trim(vorname);

UPDATE pruefer
   SET name = trim(name), 
   vorname = trim(vorname);

COMMIT;

Danke Jungs es funzt.
Ihr und Postgres sind Klasse!