Rob_2: mysql pattern matching

Hallo zusammen,

ich hab folgende mysql Tabellen.

Tabelle "Data"
data_id;name;

1;neu_abc;  
2;neu_123;  
3;test_assdg;

Tabelle "Pattern"

pat_id;pattern;  
1;test_;  
2;neu_;

Nun möchte ich diese 2 Tabellen anhand der Pattern joinen.
Ergebnis wäre also:
data_id;name;pat_id;pattern
1;neu_abc;2;neu_;
2;neu_123;2;neu_;
3;test_assdg;1;test_;

Von der Logik also sowas wie:
SELECT * FROM data,pattern WHERE name.data REGEXP '^<Feld pattern>';

Wie sieht dafür die Syntax aus? Ich finds nicht :(
Danke.

Grüsse
Rob

  1. Hallo,

    Deine Schreibweise der Tabellen ist nicht gerade übersichtlich

    Tabelle "Data"
    data_id;name;
    1;neu_abc;
    2;neu_123;
    3;test_assdg;

    Tabelle "Pattern"
    pat_id;pattern;
    1;test_;
    2;neu_;

    Nun möchte ich diese 2 Tabellen anhand der Pattern joinen.

    data_id;name;pat_id;pattern
    1;neu_abc;2;neu_;
    2;neu_123;2;neu_;
    3;test_assdg;1;test_;

    data_id | name       | pat_id | pattern
    --------+------------+--------+---------
          1 | neu_abc    |      2 | neu_
          2 | neu_123    |      2 | neu_
          3 | test_assdg |      1 | test_;

    wäre leichter lesbar und weniger fehleranfällig. Ich hatte zunächst die Spalte pat_id völlig übersehen ...

    Wie sieht dafür die Syntax aus? Ich finds nicht :(

    mir ist nicht ganz klar, ob der Inhalt von pattern in name vorkommen soll, ober ob name mit pattern beginnen soll. In beiden Fällen nutzte ich jedoch die Funktion LOCATE(), die mir die Position des ersten Vorkommens eines Teilstrings in einer anderen Zeichenkette angibt.

    Je nach Anforderung prüfst Du auf

    = 1 -- wenn name mit pattern beginnen muss
     > 0 -- wenn name pattern enthalten soll

    Hier am Beispiel "name enthält pattern" mit hübscher expliziter Join-Syntax:

      
    SELECT            -- Gib mir  
        d.data_id,    -- die gewünschten Spalten  
        d.name,  
        p.pat_id,  
        p.pattern  
    FROM              -- aus der Tabelle  
        Data d        -- Data (über den Alias d angesprochen),  
    INNER JOIN        -- die mit der Tabelle  
        Pattern p     -- Pattern (mit Aliasnamen p)  
    ON                -- über die Bedingung,  
        [link:http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#function_locate@title=LOCATE](p.pattern, d.name) > 0  
    -- dass pattern (aus p) in name (aus d) enthalten ist, verknüpft ist.  
    
    

    Freundliche Grüße

    Vinzenz

    1. Hier am Beispiel "name enthält pattern" mit hübscher expliziter Join-Syntax:

      SELECT            -- Gib mir
          d.data_id,    -- die gewünschten Spalten
          d.name,
          p.pat_id,
          p.pattern
      FROM              -- aus der Tabelle
          Data d        -- Data (über den Alias d angesprochen),
      INNER JOIN        -- die mit der Tabelle
          Pattern p     -- Pattern (mit Aliasnamen p)
      ON                -- über die Bedingung,
          [link:http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#function_locate@title=LOCATE](p.pattern, d.name) > 0
      -- dass pattern (aus p) in name (aus d) enthalten ist, verknüpft ist.

        
      Danke, sieht gut aus!