Получение первого значения в таблице sql значение которой содержится во второй таблице
Есть таблица,например:
- Привет Иван
- Привет Андрей
- Привет Сергей
- Здравствуй Таня
- Здравствуй Света
- Здравствуй Юля
- Алоха Галя
- Хеллоу Настя
И есть вторая:
- Пр
- ству
- ох
- халл
Необходимо найти первое значение в первой таблице ,всех имеющихся значений второй таблицы. Т.е. в результате будет:
- Привет Иван
- Здравствуй Таня
- Алоха Галя
Догадываюсь что скорее всего джойнами ,но не пойму как вытащить топовое значение.
Ответы (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)