SQL SELECT wo der Variablenwert LIKE ist

8

Ich versuche, einen Kalenderdienst zu erstellen. In diesem Kalenderdienst gibt es Ereignisse, und Ereignisse können mit Metadaten versehen werden, die durchsucht werden können.

Ich möchte nach Datensätzen suchen können, in denen alle Tags vorhanden sein müssen (obligatorische Tags) und / oder wo Tags vorhanden sind (optionale Tags).

Ich habe es geschafft, eine Abfrage zu erstellen, wo dies funktioniert, wenn der Tag-Wert 'genau' entspricht. Aber ich kann nicht herausfinden, wie Ergebnisse zurückgegeben werden, wenn der Tag-Wert LIKE '% value%' lautet.

Hier ist meine aktuelle Implementierung

Tabellen und Daten

%Vor%

Abfrage

%Vor%

Ich habe eine SQLFiddle-Demo dafür erstellt.

Meine Idee ist es, @SearchTypeId zu verwenden, um zwischen der Suche nach exakter Übereinstimmung und der Übereinstimmung nach LIKE zu wechseln.

(Hinweis: Ich bin kein DBA, also kann es bessere Wege geben, dies zu tun. Ich bin offen für Vorschläge)

Kann mir jemand Vorschläge geben, wie man LIKE-Übereinstimmungen für Tag-Werte erhält?

Vielen Dank

    
Yetiish 16.08.2013, 09:12
quelle

2 Antworten

0

chucknelson gab mir den Anstoß, den ich brauchte, um herauszufinden, was getan werden musste.

Das Hinzufügen dieses Abschnitts erhält eine ähnliche Übereinstimmung für den Wert:

%Vor%

Dies ermöglicht mir, die LIKE-Übereinstimmung zu machen, und mit einem @SearchType-Parameter kann ich entweder die ursprüngliche Abfrage ausführen, oder diese entsprechend ändern.

    
Yetiish 16.08.2013, 12:13
quelle
1

Ich denke, Ihre Idee, einen Typ von Flag / Switch zu verwenden, um den passenden Typ zu ändern, funktioniert. Ich habe es mit Wörtern anstelle von IDs implementiert, aber wenn Sie nur die Join-Bedingung basierend auf dem Suchtyp umschalten, sollten Sie LIKE-Übereinstimmung wie erwartet erhalten.

Geige: Ссылка

Ich habe zuerst ein Tag hinzugefügt, das dem Tag 1 ähnlich war und es zum Testen an Ereignis 2 angehängt.

%Vor%

Ich habe dann den Suchtyp flag / switch erstellt.

%Vor%

Nun können Sie die EXISTS-Join-Bedingung basierend auf diesem Flag umschalten. Ich habe deine NOT EXISTS zu EXISTS geändert, nur um es zu verstehen. Unten ist die neue Join-Bedingung, die den obligatorischen Tag-Block als Beispiel verwendet.

%Vor%

Ich bin mir sicher, dass es in diesem SQL einige Re-Factoring- und Optimierungsmöglichkeiten gibt, aber das sollte Ihnen zumindest eine Idee geben, wie Sie LIKE-Matching durchführen können, wenn Sie dies wünschen. Hoffe es hilft!

    
chucknelson 16.08.2013 11:01
quelle

Tags und Links