Update Commando auf mehrere Datensätze

Hallo,

ich habe ein problem :frowning:. Ich habe eine Datenbankansicht mit Elementen die in einer bestimmten Reihenfolge aneinanderhängen (SORTORDER).
Es ist eine Ansicht deshalb fehlt die Primäre ID.

FREMDID NAME SORTORDER

22 Name1 1
22 Name2 2

Beim Ändern der Reihenfolge (ersetze 1 durch 2 und 2 durch 1) gehe ich wie folgt vor:
Selektiere alle Datensätze mit FremdID = 22, Name = Name2 und SortOrder = 2 und ersetze Sortorder 2 durch 1.

Und dann habe ich 2 gleiche datensätze und das nächste Updatekommando würde dann beide Datensätze updaten und deren SortOrder auf 2 setzen.

Kann ich irgendwie bestimmen das er in einem solchen Fall nur 1 Datensatz ändern soll ohne den Hauptschlüssel mit reinzunehmen?

Danke
Grüße
Patrick

wie in jeder umgebung ohne einem entsprechenden swap-befehl:

  • zuerst 1 durch 3 ersetzen
  • dann 2 durch 1 ersetzen
  • zuletzt 3 durch 2 ersetzen

damit hast du 3 statements statt einem, funkt aber garantiert.

soweit so umständlich.

wenn du angeben würdest, welches db-system du verwendest, könnte man eine etwas komfortablere lösung anbieten.

im oracle z.b.:

update ansicht
set sortierkriterium = decode (sortierkriterium,1,2,1)
where sortierkriterium in (1,2);

also ein einzelnes update, das in einem rutsch alles umdreht. sollte auch unter anderen systemen ähnlich gehen. voraussetzung ist ein if-, case- oder sonstwas-statement.

es geht auch etwas verwirrender.

update ansicht
set sortierkriterium = abs(sortierkriterium - 3)
where sortierkriterium in (1,2);

die abs-funktion liefert den absoluten wert, also ohne vorzeichen.

2 - 3 = -1, abs(-1) = 1
1 - 3 = -2, abs(-2) = 2

lg
erwin

wie in jeder umgebung ohne einem entsprechenden swap-befehl:

  • zuerst 1 durch 3 ersetzen
  • dann 2 durch 1 ersetzen
  • zuletzt 3 durch 2 ersetzen

Es war nur ein Beispiel mit 2 Datensätzen in wirklichkeit sind es mehr und somit ist die Lösung nichtmehr gut.

wenn du angeben würdest, welches db-system du verwendest,
könnte man eine etwas komfortablere lösung anbieten.

Access… aber falls es nicht da so ein kommando gibt ist es ok, dann nehme ich eben den Primärschlüssel mit auf.

Danke
Grüße

Hi!

Hallo,

ich habe ein problem :frowning:. Ich habe eine Datenbankansicht mit
Elementen die in einer bestimmten Reihenfolge aneinanderhängen
(SORTORDER).
Es ist eine Ansicht deshalb fehlt die Primäre ID.

FREMDID NAME SORTORDER

22 Name1 1
22 Name2 2

Beim Ändern der Reihenfolge (ersetze 1 durch 2 und 2 durch 1)
gehe ich wie folgt vor:
Selektiere alle Datensätze mit FremdID = 22, Name = Name2 und
SortOrder = 2 und ersetze Sortorder 2 durch 1.

Und dann habe ich 2 gleiche datensätze und das nächste
Updatekommando würde dann beide Datensätze updaten und deren
SortOrder auf 2 setzen.

Kann ich irgendwie bestimmen das er in einem solchen Fall nur
1 Datensatz ändern soll ohne den Hauptschlüssel mit
reinzunehmen?

Unter Oracle würde ich - aus dem Handgelenk ohne Gewähr - ein

update tabelle
 set sortorder = decode(sortorder,1,2,2,1,sortorder)
 where fremdid=22 
 and ((name="name2" and sortorder=2) or
 (name="name1" and sortorder=1))

durchführen

Grüße,
Tomh