Поскольку вы ищете ВСЕ значения «LIKE», которые вам нужно найти, вам понадобится ИЛИ между ними, COUNT (*), чтобы увидеть, сколько совпадений, и GROUP BY для идентификатора, а также HAVING, чтобы соответствовать рассчитывать, что вы ожидаете ...
select
DETAILID,
count(*) RecsFound
from
YourTable
where
NAME LIKE '%a%'
or NAME LIKE '%b%'
or NAME LIKE '%c%'
or NAME LIKE '%d%'
group by
DetailID
having
RecsFound = 4
Как вы упомянули, это может быть случайное число "похожих" квалификаторов и звучит так, как если бы это был динамически сконструированный SQL-запрос. Поэтому убедитесь, что количество предложений HAVING соответствует тем записям, с которыми вы тестируете.
РЕДАКТИРОВАТЬ - пересмотренный ответ переместить IF () в раздел
select
DETAILID
from
YourTable
where
if( NAME LIKE '%a%', 1, 0 )
+ if( NAME LIKE '%b%', 1, 0 )
+ if( NAME LIKE '%c%', 1, 0 )
+ if( NAME LIKE '%d%', 1, 0 ) = 4
Полагаю, я смотрел на нее из многорядной таблицы, где каждая запись представляла собой собственный элемент, для которого вы проверяли. Вы хотите, чтобы все значения в одной строке соответствовали ВСЕМ НРАВИТСЯ ... Хотя вы приняли другой ответ, вот еще один вариант БЕЗ использования всех различных объединений ...
Кроме того, проходит через таблицу ONCE вместо 2, 3, 4 или более через все союзы, затем группируется с помощью ... Он достигает записи ONCE, квалифицирует все 4 условия и завершается.