Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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);

Geschrieben

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)

Geschrieben

(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

Geschrieben (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 von dr.dimitri

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 erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...