Stefan Welscher: [MySQL] Feldinhalt in LIKE-Ausdruck verwenden?

Guten Morgen euch allen,
ich hab ein vermutlich leichtes Problem, dessen Lösung ich aber nicht näher kommen kann.
Ich habe zwei Tabellen in einer DB. Das Feld der einen Tabelle(1) beginnt mit der gleichen Kennzahl wie das Feld zweiten Tabelle(2), danach kommt aber in der zweiten Tabelle(2) ein Punkt gefolgt von einer weiteren Zahl.

Ich möchte jetzt eine MySQl-Abfrage starten, die für alle Treffer aus Tabelle 1 die entsprechenden matches aus Tabelle 2 herausfiltert.

Ich hab mir das so vorgestellt:

SELECT b.b1, b.b2, b.b3
FROM table_1 AS a, table_2 as b
WHERE a.a1='Wert' AND b.b1 LIKE a.a2 '.%';

So funktioniert das aber leider nicht.
Wie könnte ich das machen?

Danke und Gruß,
Stefan

  1. Hello,

    SELECT b.b1, b.b2, b.b3
    FROM table_1 AS a, table_2 as b
    WHERE a.a1='Wert' AND b.b1 LIKE a.a2 '.%';

    setze die Inhalte mit einer entsprechenden Funktion zusammen.
    Meine bevorzugte Lösung wäre allerdings eine Änderung des Datenmodells, da du dir eine LIKE-Operation meist mit Performanceverlust erkaufst, fachlich mal ganz davon abgesehen, b.b1 offensichtlich entweder einen anderen Sachverhalt enthält als a.a2, oder das b.b1 nicht atomar ist.

    MfG
    Rouven

    --
    -------------------
    sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
    Friendships are a lot like a backyard garden. We plan to tend to them, but we just always seem to put it off until next week. --  Christian Clemenson as Jerry Espenson in Boston Legal: "Patriot Acts"
    1. Meine bevorzugte Lösung wäre allerdings eine Änderung des Datenmodells, da du dir eine LIKE-Operation meist mit Performanceverlust erkaufst

      Holy Shit! Ihr habt sowas von Recht!
      Danke für den Tipp mit CONCAT, da konnte ich es jetzt zumindest mal probieren. Eine Einzelne Abfrage dauerte bei mir jetzt 15 _Minuten_. Das ist doch "geringfügig" mehr als ich mir vorgestellt habe. Dabei ist die Tabelle 1 mit ihren 6000 Datensätzen sogar noch relativ schnuckelig.
      Da muss ich mir wohl was anderes ausdenken, aber immerhin wieder was gelernt :).

      Danke!

      1. Moin!

        Da muss ich mir wohl was anderes ausdenken, aber immerhin wieder was gelernt :).

        Hatte ich dir ja schon geschrieben, was du ändern musst.

        - Sven Rautenberg

  2. Moin!

    Ich habe zwei Tabellen in einer DB. Das Feld der einen Tabelle(1) beginnt mit der gleichen Kennzahl wie das Feld zweiten Tabelle(2), danach kommt aber in der zweiten Tabelle(2) ein Punkt gefolgt von einer weiteren Zahl.

    Ganz schlechtes Datenmodell!

    Diese Krücke kriegst du nur mit extremen Einbußen in der Performance gejoint. Davon merkst du vielleicht bei zehn Datensätzen gar nichts, und bei hundert auch noch nicht wirklich, aber im wirklichen Betrieb ab tausend Datensätzen warten deine Nutzer dann unerwartet ewig auf ein simples Ergebnis.

    Du solltest die Spalte in der zweiten Tabelle auftrennen in zwei Spalten: Eine enthält dieselbe ID, wie Tabelle 1, die zweite Spalte den Rest nach dem Punkt.

    Wenn du tatsächlich auch die Punkt-Kombination beider Spalten irgendwo in deiner Anwendung benötigst, dann kombiniere dir diesen Wert im SELECT.

    - Sven Rautenberg