1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

SQL-Problem "kaskadiertes Suchen"

Discussion in 'Programmieren' started by cetus92, Mar 10, 2016.

Thread Status:
Not open for further replies.
  1. cetus92

    cetus92 Kbyte

    Hallo,

    ich habe in einer Datenbank Datensätze, die ihre Vorgänger enthalten, indem jeder Datensatz die ID des Vorgängers als PrevID enthält. Auf diese Weise entstehen logische Ketten der "miteinander verwandten" Datensätze. Die PrevID "0" bedeutet "hier gibt es keinen Vorgänger".

    Beispiel:
    Folgende Datensätze existieren:
    ID PrevID
    1 0
    2 0
    3 0
    4 1
    5 0
    6 2
    7 6
    8 4
    9 3
    10 8
    11 0

    Es sollen nun für eine gegebene ID alle Vorgänger gefunden werden mit "SELECT ID FROM tabelle WHERE ...". Der WHERE-Part soll für eine vorgegebene ID alle Vorgänger finden. Beispiel: Führe die Suche für die ID 10 aus, dann bestünde das Ergebnis aus den vier Datensätzen mit den IDs 10, 8, 4, 1.
    <-- 10 hat den Vorgänger 8, 8 hat den Vorgänger 4, 4 hat den Vorgänger 1, 1 hat keinen Vorgänger.

    Ich brauche eine SQL-Befehlsfolge, die mir auch bei großen Datenmengen ein einigermaßen schnelles Ergebnis liefert. TEMP TABLEs dürfen gerne zum Einsatz kommen ...

    Ich recherchiere seit Tagen, ohne eine Lösung zu finden. Vielleicht kann jemand helfen?
     
  2. Hascheff

    Hascheff Moderator

  3. cetus92

    cetus92 Kbyte

    Ja, danke Hascheff, ich habe inzwischen schon herausgefunden, dass "rekursives Suchen" hier zutrifft, nicht "kaskadiertes". Leider kann ich jetzt das Thema meiner Anfrage nicht mehr ändern.

    Die Lösung für mein Problem in z.B. Postgres sind "Common Table Expressions", CTE. Die Abfragen beginnen mit "WITH RECURSIVE ..." und liefern exakt das gewünschte Ergebnis. Beisplielcode habe ich aus dem Artikel http://wikis.gm.fh-koeln.de/wiki_db/Datenbanken/WITH-Klausel ("Welche Unterteile hat das Teil 62?") entnommen.

    Leider funktioniert die Syntax nicht in Informix-Datenbanken, obwohl CTEs eigentlich seit Informix 11.5 unterstützt sein sollten (?). Und *für Informix* brauche ich noch eine entsprechende Lösung.

    Vielleicht weiß hier noch jemand Rat?
     
Thread Status:
Not open for further replies.

Share This Page