PDA

View Full Version : SQL-Update mit Subselect der selben Tabelle



sonicreducer
31-03-15, 15:25
Hallo!

Folgendes Problem - ich habe eine Tabelle die sieht wie folgt aus:

[Artikel]
[Liste] [Pneu] [Palt]
aaaa 1 12
aaaa 10 14 28


Ich möchte jetzt in einem SQL-Statement das Feld [Palt] wenn
[Liste = 1] mit dem Feld [Pneu] wenn
[Liste = 10] updaten wenn [Artikel] = aaaa .

Hoffe irgendwer versteht mein Problem so wie ich´s beschrieben hab :D

Bekomme leider immer den Fehler ...Nullwerte nicht zulässig ....

Geht das überhaupt ??

Vielen dank für Euer Feedback,

RK

B.Hauser
31-03-15, 15:38
Zeig doch einfach mal wie Dein SQL-Statement aussieht

Birgitta

sonicreducer
31-03-15, 15:49
Sorry....ist natürlich auch eine Möglichkeit ;-)

update File1 a set a.palt = (select b.pneu
from File1 b where a.artikel = b.artikel and
b.liste = 10) where a.liste = 1

malzusrex
31-03-15, 15:56
update File1 a
set a.palt = (select b.pneu
from File1 b
where a.artikel = b.artikel
and b.liste = 10)
where a.liste = 1
and exists (Select * from File1 b
where a.artikel = b.artikel and b.liste = 10)


Versuche es mal damit

Gruß
Ronald

sonicreducer
31-03-15, 16:55
Vielen Dank Ronald - es funkt!

LG Roman

Fuerchau
31-03-15, 16:56
Wie immer gibt's natürlich mehrere Lösungen:

update File1 a
set a.palt = coalesce((select b.Pneu
from File1 b
where a.artikel = b.Artikel
and b.liste = 10), a.palt)
where a.liste = 1

sonicreducer
31-03-15, 17:13
So viele Lösungen ... und keine hab ich gefunden :D

Ebenfalls besten Dank,

LG Roman

Fuerchau
31-03-15, 19:27
Das Problem ist:
Der scalare Subselect kann auch "Nichts" als Ergebnis finden.
Fatal an dieser Stelle ist, wenn das Zielfeld NULL erlaubt, wird ggf. der NULL-Inhalt gesetzt obwohl man dies vielleicht gar nicht wollte.
Entweder man stellt den Ursprungswert her (coalesce) oder wählt die Daten auf die einzuschränkenden Sätze incl. des skalaren Subselects aus.

Nun hängt es von den Indizes ab, welcher Befehl schneller ist.