Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
Sion Member Откуда: Сообщений: 67 |
выход найден ISABOUT("Наушник*" weight(1.0), "полноразмерн*" weight(0.8) , "Sony*" weight(0.6)) |
20 июл 19, 22:54 [21931022] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
Sion, Для реализации желаемого придется containstable завернуть в multi-statement TVF |
21 июл 19, 15:57 [21931210] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
Sion, Писал же
|
||
21 июл 19, 19:00 [21931266] Ответить | Цитировать Сообщить модератору |
Sion Member Откуда: Сообщений: 67 |
invm, спасибо за помощь, вопрос решен. |
21 июл 19, 19:37 [21931282] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |