View Full Version : Update mit Inhalt aus anderer Tabelle
Hallo,
folgendes Problem:
ich habe 2. Tabellen:
A.TEILENR
A.PREIS
B.TEILENR
B.PREIS
B.CHECK
jetzt möchte ich in Tabelle A das feld PREIS mit dem Wert von Tabelle B Updaten. Aber nur wenn B.CHECK = 0.
Wie mache ich das ? irgendwie muss ich ja joinen ?
Vielen Dank
linguin
Update TableA as a
Set a.Preis = (Select b.Preis
From TableB as b
Where b.TeileNr = a.TeileNr)
Where exists (Select 1
From TableB as b
Where b.TeileNr = a.TeileNr
and b.Check = 0)
danke woki.
jetzt bekomme ich folgende meldung:
Wahrscheinlich liefert die erste Subabfrage mehrere Zeilen zurück. Was so auch richtig ist. kann ich das limitieren ? ein "fetch first 1 rows" funktioniert nicht.
Die Ergebnistabelle einer Anweisung SELECT INTO, einer Unterabfrage oder einer Unterauswahl einer Anweisung SET enthält mehr als eine Zeile. Es handelt sich um Fehlerart 2. Bei Fehlerart 1 wurde von einer Anweisung SELECT INTO versucht, mehr als eine Zeile zurückzugeben. Bei Fehlerart 2 wurde durch eine Unterauswahl eines Basisprädikats mehr als eine Zeile erstellt. Es ist nur eine Zeile zulässig. Fehlerbeseitigung: Die Auswahl so ändern, dass nur eine Ergebniszeile zurückgegeben wird, und die Anforderung wiederholen. Zur Verarbeitung mehrerer Ergebniszeilen müssen die Anweisungen DECLARE CURSOR, OPEN und FETCH verwendet werden. Für eine Unterabfrage können die Prädikate IN, EXISTS, ANY und ALL verwendet werden, um mehrere Ergebniszeilen zu verarbeiten. Wenn eine einzige Zeile erwartet wird, können Datenfehler, wie z. B. doppelte Zeilen, auftreten, die die Rückgabe mehrerer Zeilen bewirken.
wenn alle Preise gleich sind hilft distinct, sonst must du wohl selber entscheiden welches der richtige Satz ist
Robi
Da hilft dann wohl eher MAX/MIN/AVG, je nach dem, welcher Preis der schönere ist.
Dann müßte es so aussehen:
Update TableA as a
Set a.Preis = (Select min(b.Preis) <- Wahlweise min/max/avg
From TableB as b
Where b.TeileNr = a.TeileNr
and b.Check = 0)
Where exists (Select 1
From TableB as b
Where b.TeileNr = a.TeileNr
and b.Check = 0)
Probiers einfach aus.
Ggf. solltest du (wenn vorhanden), 0-Preise oder negative Preise ausschließen.