DeadNovum Geschrieben 27. Februar 2009 Teilen 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); Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 27. Februar 2009 Teilen Geschrieben 27. Februar 2009 Wie ist Deine Frage / Problem? Phil Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DeadNovum Geschrieben 27. Februar 2009 Autor Teilen 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) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 27. Februar 2009 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 27. Februar 2009 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.