2015-08-29 2 views
0

Я пытаюсь написать SQL-запрос для фильтрации записей из таблицы продуктов для поиска в зависимости от текста поиска. Текст будет содержать несколько слов, разделенных пробелом (например, Samsung s6)Отфильтровать результаты запроса SQL для поиска

Проблема заключается в том, что результаты должны содержать все слова в результате.

Теперь записи могут иметь имена, как

  1. Samsung s6
  2. Samsung Galaxy s6
  3. Samsung A5
  4. Samsung GALAXY s6 край
  5. Apple Iphone 6

прямо сейчас для текста поиска «samsung s6» должен получить записи 1,2,4 в результате но способ, которым я пытался, дает мне 1,2,3,4 строки в результате.

мой запрос:

CREATE TABLE #TempSearch 
(
    ID INT IDENTITY(1,1), 
    Value VARCHAR(200) 
) 

INSERT INTO dbo.#TempSearch 
SELECT * FROM CSVToTable(ISNULL(@ModelName,''),' ') 

SELECT 
    T1.* 
FROM 
    <table1> T1 INNER JOIN #TempSearch T2 ON T1.Name LIKE CONCAT('%', T2.Value, '%') 

Я взял строку поиска в временной таблице, которая содержит строку для каждого слова (разделенных пробелами)

затем внутренней соединенную с основной таблицей.

+0

Пожалуйста, укажите желаемый результат. –

+0

@ PM77-1 Я упомянул о желаемом результате в вопросе «для текста поиска» samsung s6 'i должен получить записи 1,2,4 в результате, но способ, которым я пытался, давал мне 1,2,3,4 строки в результат из записей в вопросе ». –

ответ

1

Я думаю, что вы хотите, агрегация и левое внешнее соединение:

SELECT T1.Name 
FROM <table1> T1 JOIN 
    #TempSearch ts 
    ON T1.Name LIKE CONCAT('%', Ts.Value, '%') 
GROUP BY t1.Name 
HAVING COUNT(*) = (SELECT COUNT(*) FROM #TempSearch); 

Это подсчитывает количество матчей и убеждается, что матч все компоненты. Вы можете добавить больше столбцов в SELECT и GROUP BY, чтобы получить больше столбцов.

Примечание:

Следующая простая версия будет работать на вашем примере:

select t1.* 
from t1 
where t1.name like '%' + replace(@ModelName, ' ', '%') + '%'; 
+0

Получил это, работая с вашим решением. У меня были некоторые орфографические ошибки в параметре поиска, когда я попытался в первый раз. Отмечено ур как решение ..: D –

Смежные вопросы