我想与LIKE
运算符进行IN
样式比较,例如:
select *
from tbl1
where tbl1.value_to_check in (select allowed_str from allowedvalues)
允许的值可以包含以下allowed_str
:
ab% (allow any string starting ab)
%ab (allow any string ending ab)
上述查询显然不能以这种方式工作,但有没有办法使用SQL Server 2008实现这一目标?
答案 0 :(得分:4)
不,IN
不支持此功能。尝试:
SELECT t1.*
FROM dbo.tbl1 AS t1
INNER JOIN dbo.allowedvalues AS a
ON t1.value_to_check LIKE '%' + a.allowed_str + '%';
正如Damien指出的那样,如果你单独存储ab%
和%ab
,而不仅仅是ab
,那么你只需要:
SELECT t1.*
FROM dbo.tbl1 AS t1
INNER JOIN dbo.allowedvalues AS a
ON t1.value_to_check LIKE a.allowed_str;
答案 1 :(得分:0)
我相信exists子句与原始查询匹配得更好。
select *
from tbl1
where exists (select 1
from allowedvalues
where tbl1.value_to_check like '%' + a.allowed_str + '%';)
注意:这将导致tbl1上的表扫描(并且可能非常慢)