33. Найти строки, подходящие хотя бы под один шаблон
Условие задачи:
Даны две таблицы:
t1(str)— содержит строки;t2(mask)— содержит шаблоны дляLIKE.
Необходимо выбрать все строки из t1, которые соответствуют хотя бы одному шаблону из t2.
Спойлеры к решению
Подсказки
💡 Сравни строку и шаблон через
💡 Для условия «существует хотя бы один подходящий шаблон» удобно использовать
💡 При использовании
💡 В таком случае потребуется
LIKE.💡 Для условия «существует хотя бы один подходящий шаблон» удобно использовать
EXISTS.💡 При использовании
JOIN одна строка может попасть в результат несколько раз.💡 В таком случае потребуется
DISTINCT.Решение
Предпочтительный вариант через EXISTS:
SELECT t1.str
FROM t1
WHERE EXISTS (
SELECT 1
FROM t2
WHERE t1.str LIKE t2.mask
);
EXISTS проверяет, существует ли хотя бы один шаблон, которому соответствует текущая строка.
Альтернативный вариант через JOIN:
SELECT DISTINCT t1.str
FROM t1
JOIN t2
ON t1.str LIKE t2.mask;
DISTINCT нужен, потому что одна строка из t1 может соответствовать нескольким шаблонам из t2.
Для условия «соответствует хотя бы одному шаблону» вариант с EXISTS обычно лучше отражает смысл запроса и не создаёт дубликаты из-за соединения.