update daten2 set referenz=(select referenz from daten where stoffname=daten2.stoffname);
oder so ähnlich...
Andreas
Ich habe eine bereits gefüllte Tabelle DATEN, in die ich eine neue Spalte einfügen möchte, die Daten aus einer anderen Tabelle DATEN2 enthält.
DATEN:
Stoffname | Referenz
... | ...
DATEN2:
Stoffname | irgendwelche anderen Spalten | Referenz
... ... | ...
"Stoffname" ist PrimaryKey für beide Tabellen. Ich möchte nun alle Einträge aus der Spalte "Referenz" der Tabelle "DATEN2" so in "DATEN" übertragen, dass in beiden Tabellen Kombination aus Stoffname und Referenz gleich ist.
Offensichtlich geht es nicht mit
update DATEN set Referenz = DATEN2.Referenz FROM DATEN2;
denn die besagte Zuordnung stimmt dann nicht mehr, d. h. es werden zwar Inhalte übertragen, aber Stoffname und Referenz passen nicht mehr zusammen.
Eremit
update daten2 set referenz=(select referenz from daten where stoffname=daten2.stoffname);
oder so ähnlich...
Andreas
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Sowas hatte ich auch schon probiert... Fehler:
"als Ausdruck verwendete Unteranfrage ergab mehr als eine Zeile"
Eremit
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Ja!
Eremit
Gut, ich aber nicht:
AndreasCode:test=*# update daten2 set referenz=(select referenz from daten where stoffname=daten2.stoffname); UPDATE 3 Zeit: 0,472 ms test=*# select * from daten; stoffname | referenz -----------+---------- stoff1 | 1 stoff2 | 2 stoff3 | 3 (3 Zeilen) Zeit: 0,232 ms test=*# insert into daten values ('stoff2',22); INSERT 0 1 Zeit: 0,208 ms test=*# update daten2 set referenz=(select referenz from daten where stoffname=daten2.stoffname); ERROR: more than one row returned by a subquery used as an expression test=!#
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Chapeau! DATEN2 hatte ich mit einem create table .. as * from ... erstellt, und war der festen Ansicht, dass dabei die Definition des Primärschlüssels mittransportiert wird. War aber nicht so. Das habe ich mit einem alter table ... add primary key ... erledigt. Das geht dann also. Danke!
Zusatzfrage:
Wie würde ich denn einen solchen Abgleich zwischen zwei Tabellen machen, die jeweils denselben primary key über zwei Spalten haben?? Also
DATEN1
Stoffname | Datenart | irgendwelche Spalten | Referenz
DATEN2
Stoffname | Datenart | irgendwelche Spalten | Referenz_neu
Stoffname und Datenart sind composite keys in beiden Tabellen. DATEN2.Referenz_neu müßte so auf DATEN1.Referenz übertragen werden, dass sich die Kombinationen aus Stoffname und Datenart entsprechen.
Eremit
(Anfänger)
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Perfekt! Danke!!!
Ein schönes Wochenende wünscht
der Eremit
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen