Cho ba đầu vào được thiết lập và một giá trị bảng riêng biệt, mã sau đây sẽ hoạt động.
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
Tôi nghĩ rằng đây là những gì bạn đang tìm kiếm nếu bạn không muốn sử dụng 'in'. Thành thật mà nói, tôi sẽ sử dụng 'trong'. Nó đơn giản hơn nhiều và dễ viết hơn. Các mã trên mất một thời gian để làm việc. Tuy nhiên, tôi sẽ cập nhật mã 'in' của bạn như sau:
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)