SQL Search Query с использованием ключевых слов - PullRequest
3 голосов
/ 18 августа 2010

В настоящее время у меня есть запрос SQL, который возвращает результаты на основе динамического числа переданных ключевых слов.

Я преобразую список ключевых слов в таблицу и присоединяюсь к ней.

    SELECT * FROM Table1
    INNER JOIN
        dbo.udf_List2Table(@Keywords, ',') ON (Field1 LIKE '%'+Keyword+'%')

Это работает нормально, но возвращает все строки, которые содержат любое ключевых слов, которые поддерживаются. Что я хотел бы сделать, это вернуть все строки, которые содержат все предоставленных ключевых слов.

Я уверен, что вы не можете сделать это, используя JOIN. У кого-нибудь есть какие-либо предложения о том, как я могу это сделать? Я пытаюсь избежать динамического SQL.

Спасибо

Ответы [ 3 ]

1 голос
/ 18 августа 2010
SELECT  *
FROM    Table1
WHERE   NOT EXISTS
        (
        SELECT  NULL
        FROM    dbo.udf_List2Table(@Keywords, ',')
        WHERE   field1 NOT LIKE '%' + Keyword + '%'
        )

Это можно сделать более эффективно, если вы создадите индекс FULLTEXT для field1 и сделаете свою двойную кавычку @Keywords и разделите AND:

SET @Keywords = '"cabbages" AND "kings"'
SELECT  *
FROM    table1
WHERE   CONTAINS(Field1, @Keywords)
1 голос
/ 18 августа 2010

Попробуйте

SELECT Field1 FROM Table1
INNER JOIN
    dbo.udf_List2Table(@Keywords, ',') ON (Field1 LIKE '%'+Keyword+'%')
GROUP BY Field1
HAVING COUNT(Keyword) = n

, чтобы соответствовать n ключевых слов

0 голосов
/ 19 августа 2010

Может быть, вы можете сделать следующий твик.

DECLARE @recordcount int
SELECT @recordcount = count(1) from dbo.udf_List2Table(@Keywords, ',')
select t1.Field1
from Table1 t1
where @recordcount = (select count(1) from dbo.udf_List2Table(@Keywords, ',') k where t1.Field1 like '%' + k.Keyword + '%')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...