Bei drei Setup-Eingaben und einer separaten Wertetabelle funktioniert der folgende Code.
declare @input1 int =1
declare @input2 int =2
declare @input3 int =3
CREATE TABLE #tab1 (var1 INT, var2 INT , var3 INT)
INSERT INTO #tab1
VALUES (1,2,3),(0,0,0),(0,4,0),(1,4,1),(4,0,0),(0,5,1),(2,4,0),(1,4,3)
declare @set table(input int)
insert @set values (@input1), (@input2),(@input3);
select distinct #tab1.*, case when join1.i1 is null then 'No Match' else 'match' end matching
from #tab1
left join (select distinct a.input i1, b.input i2 ,c.input i3
from @set a
cross join @set b
cross join @set c ) join1
on join1.i1=#tab1.var1
or join1.i2=#tab1.var2
or join1.i3=#tab1.var3
Ich denke, das ist es, wonach Sie gesucht haben, wenn Sie 'in' nicht verwenden wollten. Um ehrlich zu sein, würde ich 'in' verwenden. Es ist viel einfacher und einfacher zu schreiben. Der obige Code brauchte einige Zeit, um zu funktionieren. Ich würde Ihren In-Code jedoch wie folgt aktualisieren:
select * ,'match'
from #tab1
where @input1 in (var1, var2, var3)
or @input2 in (var1, var2, var3)
or @input3 in (var1, var2, var3)
union
select * ,'no-match'
from #tab1
where @input1 not in (var1, var2, var3)
and @input2 not in (var1, var2, var3)
and @input3 not in (var1, var2, var3)