Ajaxa: verschachtelter Query mit Wildcard

Guten Abend,

habe folgende Beispiel Tabelle, die aus dem einzigen Feld bzw. der einzigen Spalte (varchar) "info" besteht.
Die Daten sehen einfach nur so aus:
abcde~fgh~ijk~lmn
abcde~fgh
opqr~stu~wxyz

Nun scheitere ich schon ziemlich lange daran, folgenden in Worten formulierten Select-Query zu finden.
Die Rückgabe soll aus den Zeilen bestehen, deren Inhalt bis zur zweiten Welle noch nicht vorhanden ist.
=> in diesem Fall sollte also nur opqr~stu~wxyz das Ergebnis sein, denn abcde~fgh geht nur bis zur 2. Welle und für abcde~fgh~ijk~lmn existiert ein bis zur 2. Welle übereinstimmender Eintrag, nämlich abcde~fgh.

Gibt es einen einigermaßen einfachen Weg, das hinzubekommen? Denn so lange ich bisher auch rumtüftelte, komme ich einfach nicht voran :(

Hoffe ihr kennt das und könnt mein Problem nachvollziehen.
Danke!

  1. Also deiner Datenbank kannst du diese Unterscheidung wohl nicht beibringen. In so einem Fall musst du leider alle Datensätze herausholen und auswerten, dann per Script die herausfiltern, die du benötigst.

    Ich weiß nicht, was genau du überhaupt damit vorhast, aber mach es irgendwie anders. Immer ALLE Datensätze hrauszuholen könnte auf längere Sicht die Scriptlaufzeit ziemlich in die Höhe schießen lassen und würde nur unnötig Traffic verursachen.

    1. Hi,

      dachte, das könnte mit  einem LIKE und einem RegExp funktionieren...

      1. Hello,

        dachte, das könnte mit  einem LIKE und einem RegExp funktionieren...

        es geht wahrscheinlich sogar etwas direkter, aber es wird auf jeden Fall ein äußerst brutales und gefräßiges Query, weil sämtliche Indizes außer Gefecht gesetzt werden. Es könnte in der Tat sein, dass etwas Intelligenz in ein Skript gesteckt bessere Ergebnisse bringen als die plumpe Mengenarithmetik einer Datenbank.
        Im Prinzip suchst du

        1. mittels substring_index suchst du die Anfänge Einträge, die überhaupt zwei ~ drin haben.
        2. über (1) baust du eine korrelierte Unterabfrage die prüft, ob es einen Satz gibt, der so anfängt, in etwa
          SELECT wert
          FROM tab a
          WHERE NOT EXISTS
          (
            SELECT substring_index(wert, "~", 2) AS vergleich FROM tab WHERE vergleich=a.wert
          )
          --> nur so als Anregung, kann auch sein, dass meine Logik 180° verkehrt herum ist...

        MfG
        Rouven

        --
        -------------------
        Death is nature's way of telling you to slow down.
  2. yo,

    welches dbms und welche version. des weiteren habe ich die fachliche logik noch nicht ganz verstanden, welche datensatz nun ausgesucht werden soll.

    die abfrage selbst erscheint mir nicht all zu schwierig zu sein, stichwort wäre die funktion INSTRING(), hängt aber wie gesagt von deinem dbms und version ab.

    Ilja

  3. Hallo

    habe folgende Beispiel Tabelle, die aus dem einzigen Feld bzw. der einzigen Spalte (varchar) "info" besteht.
    Die Daten sehen einfach nur so aus:
    abcde~fgh~ijk~lmn
    abcde~fgh
    opqr~stu~wxyz

    Die Rückgabe soll aus den Zeilen bestehen, deren Inhalt bis zur zweiten Welle noch nicht vorhanden ist.

    das hört sich nach dem gleichen miserablen Tabellendesign an, das auch Anna hat.

    Verbessere das Datenbankdesign und die Probleme lösen sich von selbst.

    Freundliche Grüße

    Vinzenz