Получение первого значения в таблице sql значение которой содержится во второй таблице

Есть таблица,например:

  1. Привет Иван
  2. Привет Андрей
  3. Привет Сергей
  4. Здравствуй Таня
  5. Здравствуй Света
  6. Здравствуй Юля
  7. Алоха Галя
  8. Хеллоу Настя

И есть вторая:

  1. Пр
  2. ству
  3. ох
  4. халл

Необходимо найти первое значение в первой таблице ,всех имеющихся значений второй таблицы. Т.е. в результате будет:

  • Привет Иван
  • Здравствуй Таня
  • Алоха Галя

Догадываюсь что скорее всего джойнами ,но не пойму как вытащить топовое значение.


Ответы (2 шт):

Автор решения: Konst
declare @t1 table (id int, [name] varchar(50));
declare @t2 table (id int, [name] varchar(50));

insert into @t1 (id, [name])
values 
(1, 'Привет Иван'),
(2, 'Привет Андрей'),
(3, 'Привет Сергей'),
(4, 'Здравствуй Таня'),
(5, 'Здравствуй Света'),
(6, 'Здравствуй Юля'),
(7, 'Алоха Галя'),
(8, 'Хеллоу Настя');

insert into @t2 (id, [name])
values 
(1, 'Пр'),
(2, 'ству'),
(3, 'ох'),
(4, 'халл');

select s.id, s.[name], s.search --, s.n 
from
(
select a.id, a.[name], b.[name] as search,
    ROW_NUMBER() OVER(PARTITION BY b.[name] order by a.id) as n
from @t1 a cross apply @t2 b
where
    a.[name] like '%' + b.[name] + '%'
) s
where s.n = 1
order by s.id
→ Ссылка
Автор решения: Vitaliy Zlobin
--Исходные данные:
;WITH t1 AS
(
    SELECT *
    FROM
    (
        VALUES 
        (1, 'Привет Иван'),
        (2, 'Привет Андрей'),
        (3, 'Привет Сергей'),
        (4, 'Здравствуй Таня'),
        (5, 'Здравствуй Света'),
        (6, 'Здравствуй Юля'),
        (7, 'Алоха Галя'),
        (8, 'Хеллоу Настя')
    ) AS t1 (id, "name")
), t2 AS
(
    SELECT *
    FROM
    (
        VALUES 
        (1, 'Пр'),
        (2, 'ству'),
        (3, 'ох'),
        (4, 'халл')
    ) AS t2 (id, "name")
)
--Сам запрос:
SELECT TOP 1 WITH TIES t1."name"
FROM t1
JOIN t2 ON t1."name" LIKE '%' + t2."name" + '%'
ORDER BY ROW_NUMBER() OVER(PARTITION BY t2."name" ORDER BY t1.id)
→ Ссылка