Одним из решений было бы преобразование вашего предложения WHERE EXISTS
в INNER JOIN
, например:
SELECT t1.file_id, vals.val
FROM
table1 t1
INNER JOIN (VALUES ('value1'), ('value2'), ('value3')) Vals(val)
ON t1.column1 LIKE '%' + vals.val + '%'
Недостатком этого подхода является то, что если несколько выражений соответствуют значению column1
в данной записи, вы найдете две строки в выводе. Чтобы избежать этого, вы можете, например, объединить все успешно сопоставленные выражения в одном поле.
Если вы используете SQL Server 2017 (ваш запрос отлично работает в этой СУБД), вы можете использовать STRING_AGG
:
SELECT t1.file_id, STRING_AGG(vals.val, ',')
FROM
table1 t1
INNER JOIN (VALUES ('value1'), ('value2'), ('value3')) Vals(val)
ON t1.column1 LIKE '%' + vals.val + '%'
GROUP BY t1.file_id
Проверено в на этой скрипке БД .