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
Hammerfall:
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);
Hammerfall:
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
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?
Hammerfall:
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?
Hammerfall:
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!