Im Grunde genommen haben sie die gleichen ID´s.
Also Der Händler an der ersten Position hat die ID 1
In der Adress Tabelle gehört die Adresse an der Position 1 mit der ID 1 zum Händler mit der ID 1
Im Grunde genommen haben sie die gleichen ID´s.
Also Der Händler an der ersten Position hat die ID 1
In der Adress Tabelle gehört die Adresse an der Position 1 mit der ID 1 zum Händler mit der ID 1
Ok, ich habe glaube ich verstanden was du machen möchtest.
Folgende Testdaten habe ich aufgebaut:
Code SQL:CREATE TABLE t_haendler (haendler_id NUMBER, adress_id NUMBER, bezeichnung varchar2(100)); CREATE TABLE t_adressdaten (adress_id NUMBER, adresse varchar2(100)); INSERT INTO t_haendler ( SELECT 1, NULL, 'Jürgen' FROM dual UNION ALL SELECT 2, NULL, 'Der Ralle' FROM dual UNION ALL SELECT 3, NULL, 'Der mit dem Hut' FROM dual ); INSERT INTO t_adressdaten ( SELECT 1, 'Finkenstr. 7' FROM dual UNION ALL SELECT 2, 'Superstr. 8' FROM dual UNION ALL SELECT 3, 'Hustenkamp 50' FROM dual );
select * from t_haendler;
HAENDLER_ID ADRESS_ID BEZEICHNUNG 1 Jürgen 2 Der Ralle 3 Der mit dem Hut
select * from t_adressdaten;
ADRESS_ID ADRESSE 1 Finkenstr. 7 2 Superstr. 8 3 Hustenkamp 50
Wir haben nun keine Adress-ID in der Händler Tabelle. Brauchen wir auch nicht, wenn haendler_id = adress_id ist, denn dafür haben wir ja SQL.
Code SQL:SELECT * FROM t_haendler h INNER JOIN t_adressdaten a ON (h.haendler_id = a.adress_id);
HAENDLER_ID ADRESS_ID BEZEICHNUNG ADRESS_ID ADRESSE 1 Jürgen 1 Finkenstr. 7 2 Der Ralle 2 Superstr. 8 3 Der mit dem Hut 3 Hustenkamp 50
Alternativ können wir auch die Adress_ID übernehmen.
Code SQL:UPDATE t_haendler h SET h.adress_id = (SELECT a.adress_id FROM t_adressdaten a WHERE a.adress_id = h.haendler_id);
select * from t_haendler;
HAENDLER_ID ADRESS_ID BEZEICHNUNG 1 1 Jürgen 2 2 Der Ralle 3 3 Der mit dem Hut
An die SQL Profis: Ist das correlated update Statement richtig?
Wow, sau nice , vielen vielen Dank :-) werde ich gleich mal ausprobieren :-)
Hatte es gestern auch mit Update versucht aber wahrscheinlich einen Logik Fehler gehabt...war glaube ich nah dran xD
Freut mich wenn ich helfen konnte![]()
Hier vieles nicht richtig
1. Adresse und Händer sind in diesem Modell eine 1:1 Beziehung, wieso dann überhaupt aufteilen? Richtig ist es die Händerid in den Adressatz aufzunehmen, dann kann ein Händer auch mehrere Adressen besitzen. Des weiteren einen FK Constraint auf die Händerid, die dann natürlich auch als PK in der Datenbank definiert werden muss.
2. Es wird angenommen, dass die Händerid und die Adressid miteinander korrelieren. Würde es einen Superlativ für falsch geben, wäre er das. Die PK Werte von verschiedenen Tabellen haben nichts, aber auch gar nichts miteinander zu tun.
Das das hier funktioniert liegt nur an den gefakten Daten.
3. Korrelierter Update ohne einschränkende WHERE Bedingung ist immer ein bissl heikel, da die Felder aus den Zeilen die nicht über den Join verbunden werden, auf NULL gesetzt werden. Meistens sind solche Update Statements die Ursachen für das misteriöse Verschwinden von Daten![]()
Zitat Tom Kyte:
I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.
Da gebe ich dir in allen Punkten recht, würde auch alles anders machen.
Bei meiner Frage ging es mir nur um das Update Statement in diesem spezifischen Kontext, aber danke fürs Feedback.
Lesezeichen