使用关键字的SQL搜索查询

时间:2010-08-18 14:44:57

标签: sql tsql search

我目前有一个SQL查询,它根据传入的动态关键字数返回结果。

我将关键字列表转换为表并加入其中。

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

这样可以正常工作,但它会返回包含任何所提供关键字的所有行。我想要做的是返回包含所有所提供关键字的所有行。

我很确定你不能使用JOIN来做到这一点。有没有人对我如何做到这一点有任何建议?我正在努力避免使用动态SQL。

由于

3 个答案:

答案 0 :(得分:1)

尝试

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

匹配n个关键字

答案 1 :(得分:1)

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)

答案 2 :(得分:0)

可能你可以做以下调整。

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 + '%')