Fist, лучше использовать union all
, а не union
, потому что union
требует дополнительных затрат на удаление дубликатов.
Во-вторых, ваш шаблон like
нестандартный, поддерживается только вSQL Server и Sybase.Другими словами, ни одно из ваших имен не содержит квадратных скобок или дефисов, поэтому ни одно из них не соответствует шаблону.
Делает ли это то, что вы ожидаете?
with temp(name) as (
select 'abc' from dual union all
select '123abc' from dual union all
select '1abc3' from dual
)
select *
from temp
where temp.name like '%a%';
Это только проверка синтаксиса.Это не эквивалентно вашему like
шаблону.
Я предполагаю из синтаксиса, что вы используете Oracle.Если это так, то вы можете использовать регулярные выражения:
where regexp_like(temp.name, '[a-z]')
Большинство (но не все) базы данных поддерживают регулярные выражения, поэтому вы можете выразить похожую логику в большинстве баз данных.