2010-10-29 1 views
0

У меня есть несколько таблиц, например: Car (id, NameCar) и Person (id, PersonName, Address и т. Д.)Поиск ключевого слова и поиск столбца, где он был найден?

Мне нужно найти ключевое слово и указать, в каких столбцах я его нашел.

Пример: Поиск Гражданского, возвращения Лицо с идентификатором 10 имеет гражданское название автомобиля и имя адреса.

Как я могу это сделать с хорошей производительностью?

ответ

0

Я использовал Full Text Index для лучшей производительности:

 
SELECT 
    A.UserId, 
    CASE WHEN CONTAINS(C.nm_colaborador, @palavraChave) THEN CAST(1 as bit) ELSE CAST(0 as bit) END As Nome, 
    CASE WHEN CONTAINS(C.dc_cidades, @palavraChave) THEN CAST(1 as bit) ELSE CAST(0 as bit) END As Cidade 
FROM 
    Curriculo A 
    INNER JOIN CONTAINSTABLE(Curriculo_Busca, *, @palavraChave) B ON A.UserId = B.[KEY] 
    INNER JOIN Curriculo_Busca C ON B.[KEY] = C.UserId 
1

сделать вид, который содержит все соответствующие столбцы. затем запросите это представление.

это поможет показать конкретные значения данных и ожидаемые результаты.

попеременно вы cuold использовать структуру с союзами и указать, какой союз строка приходит из .. похоже на это:

select name, 1 from person where name like '%civic%' 
union 
select street,2 from address where street like '%civic%' 

..

и т.д.

+0

Можно будет делать то же самое, что внутренние соединения? Но более элегантно? –

1

Я не знаю, как производительность с другими параметрами, но когда нам нужна эта функция, мы создали полнотекстовый каталог. Вы можете найти эту функцию в SSMS в разделе [DatabaseName] - Storage - Полнотекстовые каталоги. Определите, какие поля вы хотите индексировать, а затем создайте. Затем вы можете запросить индекс.

Вот хорошая статья, чтобы дополнить мое ужасное описание: http://www.developer.com/db/article.php/3446891/Understanding-SQL-Server-Full-Text-Indexing.htm

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