Frage:

a: Auf eine Abfrage soll ein LIKE angewendet werden. Für das LIKE stehen aber mehrere Werte zur Verfügung.

b: Weiters sollen mehrere Spalten auf mehrere Werten geprüft werden

 

 

Antwort:

Natürlich kann die Abfrage mittels CURSOR erledigt werden.

Möglich ist auch ein dynamisches SQL usw.

Eine weitere Möglichkeit besteht darin JOIN mit LIKE zu kombinieren.

Welcher Ansatz schlußentlich in der jeweiligen Situation der Beste ist, muss im allgemeinen ein Test zeigen ...

 

a1: einen Wert finden der auf einen Filter passt

declare @t table (id varchar(20) primary key )
insert into @t values ('a111'),('111b'),('c'),('111')

 

declare @filter table (f varchar(20) primary key)

insert into @filter(f) values ('%a%'), ('%b%')

 

select * from @t t inner join @filter f on t.id like f.f

 

a2: einen Wert finden der für alle Filter passt

declare @t table (id varchar(20) primary key)

insert into @t values ('a111b'),('111b'),('c'),('111')

declare @filter table (f varchar(20) primary key, num int identity(1,1))

insert into @filter(f) values ('%a%'), ('%b%')

declare @num int = (select count(num) from @filter)

select t.id, COUNT(*) from @t t inner join @filter f on t.id like f.f

group by t.id having COUNT(*) = @num

 

a3: eine weite Möglickkeit besteht darin ein einschränkendes Like zu benutzen alle Filter passt

... like 'Dolomiti Super [KS]%' 

 

Das Ergebnis würde zum Beispil auf Werte vom Typ "Dolomiti Super Sun" und "Dolomiti Super Kids" prüfen.

 

b: eine Zeile finden wo ein Filter auf min. einen Wert passt

declare @t table (id varchar(20) primary key, id2 varchar(20) )
insert into @t values ('a111', '222b'),('111b', '222a'),('c', 'cccb'),('111', 'ccca')

declare @filter table (f varchar(20) primary key)
insert into @filter(f) values ('%a%') --, ('%b%')

select id, id2
from @t t left join @filter f on t.id like f.f
left join @filter f1 on t.id2 like f1.f
where f.f is not null or f1.f is not null