和IN运算符比较

时间:2012-03-20 15:04:39

标签: sql-server sql-server-2008

我想与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实现这一目标?

2 个答案:

答案 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上的表扫描(并且可能非常慢)