Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Containstable  [new]
Sion
Member

Откуда:
Сообщений: 67
Добрый вечер, в поиск падает фраза "Наушники полноразмерные Sony"
помогите развернуть запрос в один JOIN чтобы не прибегать к нагромождению JOIN для каждого слова


select * from
(SELECT [ID]
,[structura_id]
,[HID]
,[short_name]
,[full_name]
,ISNULL(f1.[RANK],0) + ISNULL(f2.[RANK],0) + ISNULL(f3.[RANK],0) as r
FROM [MONITORING].[dbo].[1CSTRUCTURA_PATH] s
LEFT JOIN CONTAINSTABLE ([1CSTRUCTURA_PATH],[short_name],
'ISABOUT("Наушник*" weight(1.0))') f1
on s.[ID] = f1.[KEY]
LEFT JOIN CONTAINSTABLE ([1CSTRUCTURA_PATH],[short_name],
'ISABOUT("полноразмерн*" weight(0.8))') f2
on s.[ID] = f2.[KEY]
LEFT JOIN CONTAINSTABLE ([1CSTRUCTURA_PATH],[short_name],
'ISABOUT("Sony*" weight(0.6))') f3
on s.[ID] = f3.[KEY]
) a
order by a.r desc
20 июл 19, 22:09    [21931019]     Ответить | Цитировать Сообщить модератору
 Re: Containstable  [new]
Sion
Member

Откуда:
Сообщений: 67
выход найден
ISABOUT("Наушник*" weight(1.0), "полноразмерн*" weight(0.8) , "Sony*" weight(0.6))
20 июл 19, 22:54    [21931022]     Ответить | Цитировать Сообщить модератору
 Re: Containstable  [new]
Sion
Member

Откуда:
Сообщений: 67
И снова добрый вечер.))

Возвращаюсь к насущному зверю CONTAINS.

Есть у меня таблица товаров и таблица каталогов.
Задача для новых товаров найти каталоги по наилучшему схождению.

Вот думаю я скрещю таблицы FULL JOIN и скину в @SearchWord все названия товаров.

нужно что то в таком стиле

select * from Product p
full join Catalog c
inner join Containstable(Catalog, catalog_name, product_name) t
on c.id = t.[KEY]


Но не тут то было поперхнулся на product_name, объясните как всетаки едят этого зверя?
21 июл 19, 14:10    [21931176]     Ответить | Цитировать Сообщить модератору
 Re: Containstable  [new]
invm
Member

Откуда: Москва
Сообщений: 9270
Sion,

Для реализации желаемого придется containstable завернуть в multi-statement TVF
21 июл 19, 15:57    [21931210]     Ответить | Цитировать Сообщить модератору
 Re: Containstable  [new]
Sion
Member

Откуда:
Сообщений: 67
invm, не выходит

CREATE FUNCTION [dbo].[Sample] (@text nvarchar(100))
RETURNS TABLE AS  
RETURN
(
		SELECT TOP 1 * FROM CONTAINSTABLE ([1CSTRUCTURA_PATH], [short_name], @text)
		      
)

SELECT *  FROM [MONITORING].[dbo].[1CSTRUCTURA] s
cross apply [MONITORING].[dbo].[Sample](s.short_name) q

Встроенная функция "MONITORING.dbo.Sample" не может принимать взаимосвязанные параметры или вложенные запросы, так как использует полнотекстовый оператор.
21 июл 19, 18:55    [21931263]     Ответить | Цитировать Сообщить модератору
 Re: Containstable  [new]
invm
Member

Откуда: Москва
Сообщений: 9270
Sion,

Писал же
invm
multi-statement TVF
21 июл 19, 19:00    [21931266]     Ответить | Цитировать Сообщить модератору
 Re: Containstable  [new]
Sion
Member

Откуда:
Сообщений: 67
invm,

спасибо за помощь, вопрос решен.
21 июл 19, 19:37    [21931282]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить