Beide Lösungen haben aber für meine Aufgabenstellung eine Macke. Es sollen zwei in der menge aller s aufeinanderfolgende Datensätze getauscht werden. Es ist nur der Schlüssel s1 explizit bekannt, der Schlüssel s2 muss durch s2=s1-1 oder s2=s1+1 ermittelt werden.
wenn dir nicht bekannt ist, wer mit wem tauschen soll, ist die aufgabe nicht lösbar.
wenn du mit einem nachbarn tauschen möchtest, muß zumindest bekannt sein, ob dies der linke oder rechte sein soll.
Dafür ist der geschlossene Nummernkreis notwendig. Oder irre ich mich da. Außerdem müssen die Grenzen berücksichtigt werden. Am unteren Ende ist das kein Problem, da der erste Schlüssel auch mit 1 festgelegt sein kann. Allerdings ist am oberen Ende wieder nichts ohne Abfrage möglich, da die Anzahl der in der Liste befindlichen Sätze nicht festgelegt ist.
wenns denn keinen nachbarn zur linken oder rechten gibt, kann auch nicht getauscht werden.
Der Tausch darf also nur stattfinden, wenn beide Schlüssel vorhanden sind. Ich habe schon gegrübelt, ob man das mit einem SelfJoin prüfen könnte.
daher muß man prüfen, obs einen nachbarn auf der seite gibt.
dazu muß die where bedingung um einen subselect erweitert werden.
wenn dies nicht geht, muß man das vorher separat machen.