Как сравнение с оператором IN - PullRequest
1 голос
/ 20 марта 2012

Я хочу выполнить сравнение в стиле 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 ]

4 голосов
/ 20 марта 2012

Нет, IN не поддерживает это. Попробуйте:

SELECT t1.* 
FROM dbo.tbl1 AS t1
INNER JOIN dbo.allowedvalues AS a
ON t1.value_to_check LIKE '%' + a.allowed_str + '%';

Как указывает Дэмиен, если вы храните 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;
0 голосов
/ 20 марта 2012

Я считаю, что существующее предложение лучше соответствует исходному запросу.

select *
from tbl1
where exists (select 1
              from allowedvalues 
              where tbl1.value_to_check like '%' + a.allowed_str + '%';)

Примечание: это приведет к сканированию таблицы на tbl1 (и может быть очень медленным)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...