Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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)

(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

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 Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.