2016-09-07 86 views
1

我有一个包含大量文本列的表,并且需要能够使用搜索项来查询表。对于单而言,这是简单的...对多个输入的SQL查询

SELECT * FROM things WHERE @searchTerm in (column1, column2...columnX) 

不过,有时我需要多个词搜索超过在一个查询中,像...

SELECT * FROM things WHERE @searchTerms in (column1, column2...columnX) 

...其中@searchTerms是一组值,而不是一个单一的值。有没有办法在SQL中模拟这种行为?

更新: 谢谢@Tedo G.,不幸的是我需要查询在不同的术语之间使用AND。要做到这一点,我添加了一个改变你的分组结果,并确保每个不同的结果计数的项数相匹配...

SELECT 
    * 
FROM 
    things AS A INNER JOIN @searchTerms AS B 
      ON B.[FieldName] IN (column1, column2...columnX) 
    GROUP BY column1, column2...columnX 
    HAVING count(column1) = @numberOfSearchTerms 

...这工作,但有没有更好的办法?

+1

你或许应该看看你的数据库的全文搜索功能使用。 –

+0

这可能是我要做的,但我想知道是否有办法在不使用全文搜索的情况下执行此操作,如果可能的话 – GoatInTheMachine

+1

将@searchTerms值置于临时表中? – jarlh

回答

2

另一种方式来实现这一目标是做一个表变量,并与您的搜索字词填入值,然后加入它:

SELECT 
    * 
FROM 
    things AS A INNER JOIN @searchTerms AS B 
      ON B.[FieldName] IN (column1, column2...columnX) 
+0

谢谢!这有效,但我需要查询在术语之间使用“AND”而不是“OR”,我已经更新了我的问题 – GoatInTheMachine