2016-03-28 7 views
0

Ich habe eine Tabelle [Auswahl], die Spalten Id, Id_purchase und Id_employee hat. Id ist der Primärschlüssel und alles ist vom Typ int.SQL Server suchen und ersetzen Wörter in der anderen Tabelle

Id | Id_purchase | Id_employee 
1 |  1  | 1 

Eine Tabelle [Angestellte] hat Id_employee (int) und Name varchar (250)

Id_employee | name 
1   | name1 
2   | name2 
3   | name3 

Eine Tabelle [Kauf] ist, hat Id_purchase (int) und Artikel ist varchar (250)

Id_purchase |  article 
    1  | book1 pattern ABC 
    2  | book2 autor hjk abc 
    3  | book3 about xyz 
    4  | book4 JJJJ 

und eine Tabelle [key_search] hat Id und Abfrage ist varchar (100).

ID | query 
1 | book*abc 
2 | book*about 

Wie für jeden Mitarbeiter von [Mitarbeiter] erstellen Datensatz in die Tabelle [Auswahl] IDs aller Käufe aus der Tabelle [Kaufen], in dem es Wörter in der Tabelle angegebenen hinzufügen [key_search]. In einer Tabelle [key_search] "*" als Ersatz für eine beliebige Anzahl von Zeichen. Für Beispiel muss eine Abfrage wie "Buch * abc" REPLACE zu "% Buch% abc%" für die Suche in allen Kauf.

+0

Weitere bitte klären, ist dieser Teil „Wie für jeden Mitarbeiter in der Tabelle hinzufügen [Auswahl] IDs alle neuen Einkäufe aus der Tabelle [Kauf], in der Wörter in der Tabelle [key_search] erwähnt werden. In einer Tabelle [key_search] mark * als Ersatz für eine beliebige Anzahl von Zeichen. " – TheGameiswar

+0

Mit 'SQL' wird das ein Schmerz sein. Suchen Sie nach 'CLR'-Funktion, die Zeichenfolge und ein Muster erhält. Führen Sie dann die Ersetzungslogik in C# -Code aus und geben Sie den bearbeiteten Wert zurück. Wahrscheinlich werden Sie 2 'CLR'-Funktionen brauchen, eine für die Überprüfung auf Übereinstimmung, die Sie in der' WHERE'-Klausel verwenden und eine zweite für die Ersetzung, die Sie in der 'UPDATE'-Klausel verwenden. –

+0

Ja, CLR-Funktion ist einfach, aber nur sql gelöst. –

Antwort

1

Vielleicht so:

SELECT p.Id_purchase, 
     e.Id_employee 
FROM employees e 
CROSS JOIN purchase p 
INNER JOIN key_search k 
    ON p.article LIKE '%' + REPLACE(k.[query],'*','%') + '%' 

Für aktuelle Probe, einem Ergebnis führen, wie:

| Id_purchase | Id_employee | 
|-------------|-------------| 
|   1 |   1 | 
|   1 |   2 | 
|   1 |   3 | 
|   2 |   1 | 
|   2 |   2 | 
|   2 |   3 | 
|   3 |   1 | 
|   3 |   2 | 
|   3 |   3 | 
Verwandte Themen