Vinzenz Mai: mysql pattern matching

Beitrag lesen

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