Наверное, я тут предложил пульнуть из пушки по воробьям. :) первая половина поста о теории.
Надо сказать, что такие подзапросы нужны, прежде всего, для разбиения запроса на мелкие куски. Например (просто от балды) в столбце data строки, а в столбце price цена, которая может совпасть с красной ценой дисконта, а в столбце customers выборка по customerid (а даны имена), тогда делаем что-то вроде:
Select table_a.data from table_a t1 where table_a.data in (select t1.data from t1, discounts where discounts.rednumber = t1.price)
and
table_a.data in (select t1.customerid from t1, customers where t1.customerid = customers.customerid and customers.name like '%jo_n%)
=====================
Порывшись в инете на предмет оператора with, неожиданно наткнулся - можно же создать вьюху в памяти, это должно поддерживаться, а потом пробежаться по ней курсором (если фраз сотня, это определенно будет иметь смысл):
http://www.simple-talk.com/sql/performance/the-except-and-intersect-operators-in-sql-server/
Create view list1 as
Select '%abc1%' as item
Union select '%abc2%';
Затем созидайте курсор по этой вьюхе.
Дальше, зависит от реализации, курсор должен выдавать поисковые строки в переменную, кверя вида select table_a.data from table_a where table_a.data like переменная.
В курсоре можно на копить результаты в постоянную, временную или виртуальную таблицу, заинсертив, сложив по юнион или вычтя не уникальные, и готово!
К сожалению, затестить пример не могу.