我目前有一个SQL查询,它根据传入的动态关键字数返回结果。
我将关键字列表转换为表并加入其中。
SELECT * FROM Table1
INNER JOIN
dbo.udf_List2Table(@Keywords, ',') ON (Field1 LIKE '%'+Keyword+'%')
这样可以正常工作,但它会返回包含任何所提供关键字的所有行。我想要做的是返回包含所有所提供关键字的所有行。
我很确定你不能使用JOIN来做到这一点。有没有人对我如何做到这一点有任何建议?我正在努力避免使用动态SQL。
由于
答案 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 + '%')