DeadNovum Geschrieben 27. Februar 2009 Geschrieben 27. Februar 2009 Hallo, schaut euch mal folgenden Befehl an (der müsste funktionieren, konnte ihn aber noch nicht testen) UPDATE tabelle1 t1 set t1.Spalte1 = (SELECT t2.spaltePK FROM tabelle2 t2 where t2.Spalte2 IN (SELECT T1.Spalte2 FROM tabelle1)); Möchte also in Abhängigkeit von Tabelle 2 und Tabelle 1 ein Feld der Tabelle 1 füllen. Rein theoretisch ist es möglich, dass beim ersten Select-Statment mehr als ein Zeile zurückgegeben wird, was nicht erwünscht ist. Es gäbe noch ein zweites Auswahlkritärium, was den DAtensatz wirklich eindeutig machen würde. würde dies dann so gehen: UPDATE tabelle1 t1 set t1.Spalte1 = (SELECT t2.spaltePK FROM tabelle2 t2 WHERE t2.Spalte1 IN (SELECT Spalte2 FROM tabelle1) AND t2.spalte2 = t1.spalte3);
flashpixx Geschrieben 27. Februar 2009 Geschrieben 27. Februar 2009 Wie ist Deine Frage / Problem? Phil
DeadNovum Geschrieben 27. Februar 2009 Autor Geschrieben 27. Februar 2009 na ob das zweite SQL-Statement so funktionieren würde. Bereite eine Datenmigration vor und hab noch keine Daten, wenn sie aber kommen, muss es relativ schnell gehen (meine Syntaktisch. logisch müsste es so funktionieren)
flashpixx Geschrieben 27. Februar 2009 Geschrieben 27. Februar 2009 (meine Syntaktisch. logisch müsste es so funktionieren) SQL != DBMS. Ob der Syntax korrekt ist, wird Dir schon das DBMS sagen, aber in beiden Statements können immer mehrere Rows selektiert werden. Aber wo ist denn das Problem: Der Syntax wird durch das DBMS geprüft, die Semantik dadurch, dass Du stichprobenartig die Ausgabe prüfst und da Du - hoffe ich - die Migration erst testest, sehe ich nicht das Problem Phil
dr.dimitri Geschrieben 27. Februar 2009 Geschrieben 27. Februar 2009 (bearbeitet) Hmm ich tipp mal auf Oracle, zumindest die Syntax würde passen. Was du machen möchtest nennt sich korrelierte Unterabfrage (oder correlated subquery). Dafür brauchst aber kein zusätzliches SELECT, das geht so: UPDATE tabelle1 t1 set t1.Spalte1 = (SELECT t2.spaltePK FROM tabelle2 t2 WHERE t2.Spalte1 =t1.spalte3); Damit werden alle zusammengehörigen Sätze upgedatet (vorausgesetzt t2.spalte2 und t1.spalte3 ergeben immer maximal einen Satz als Ergebnis). Nicht gefundene Sätze werden auf NULL gesetzt, da Du keine WHERE Bedingung im Update Statement selbst hast. Dim Bearbeitet 27. Februar 2009 von dr.dimitri
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden