ich die Liste "hallo" darstellen wollen, "Hallo", "Auf Wiedersehen", "Guten Tag", "grüß dich" (mit dieser Reihenfolge), in einer SQL-Tabelle:Wie man in einer geordneten Liste in SQL darstellt und einfügt?
pk | i | val
------------
1 | 0 | hi
0 | 2 | hello
2 | 3 | goodbye
3 | 4 | good day
5 | 6 | howdy
'pk' ist die Primärschlüsselspalte. Ignoriere seine Werte.
'i' ist der "Index", der die Reihenfolge der Werte in der Spalte 'val' definiert. Es ist nur verwendet, um die Reihenfolge festzulegen und die Werte sind ansonsten unwichtig.
Das Problem, das ich habe, ist mit dem Einfügen von Werten in die Liste unter Beibehaltung der Reihenfolge. Zum Beispiel, wenn ich "hey" einfügen möchte und es zwischen "Hallo" und "Auf Wiedersehen" erscheinen soll, dann muss ich die 'i' Werte von "Auf Wiedersehen" und "guten Tag" verschieben (aber vorzugsweise nicht "howdy"), um Platz für den neuen Eintrag zu schaffen.
Gibt es also ein Standard-SQL-Muster für die Shift-Operation, sondern nur die Elemente, die notwendig sind? (Beachten Sie, dass eine einfache "UPDATE-Tabelle SET i = i + 1 WHERE i> = 3" nicht funktioniert, weil sie die Eindeutigkeitseinschränkung für 'i' verletzt und auch die "Howdy" -Zeile unnötig aktualisiert.)
Oder gibt es eine bessere Möglichkeit, die geordnete Liste darzustellen? Ich nehme an, Sie könnten "i" einen Fließkommawert machen und Werte dazwischen wählen, aber dann müssen Sie einen separaten Rebalancing-Vorgang haben, wenn kein solcher Wert existiert.
Oder gibt es einen Standardalgorithmus zum Generieren von Zeichenfolgenwerten zwischen beliebigen anderen Zeichenfolgen, wenn ich 'i' ein varchar machen würde?
Oder sollte ich es nur als eine verkettete Liste darstellen? Ich habe das vermieden, weil ich auch gerne eine SELECT .. ORDER BY machen könnte, um alle Elemente in Ordnung zu bringen.
möglich Duplikat von [Aktualisieren Sie eine Liste von Dingen, ohne jeden Eintrag zu treffen] (http://stackoverflow.com/questions/2824428/update-a-list-of-things-without-hitting-every-entry) –
BTW : Ihr Kommentar * "UPDATE-Tabelle SET i = i + 1 WHERE i> = 3" funktioniert nicht, da es die Eindeutigkeitseinschränkung für 'i' * verletzt definitiv nicht in SQL Server gilt. Die Einschränkungen werden am Ende überprüft. Welche RDBMS verwenden Sie? –
Mit SQLite 3. – Travis