我试图在SQL编程中使用CONTAINS或FREETEXT,以便能够同时搜索所有单词。问题是当你搜索几个单词时,FREETEXT或CONTAINS将按行而不是按行搜索,例如:
想象一下这是我的数据库
id | c1 | c2
===============================
a | 1 | 2
b | 1 | 3
c | 1 | 2
d | 2 | 2
e | 3 | 3
f | 2 | 1
当您搜索CONTAINS(*, '1,2')
或关闭诅咒FREETEXT(*, '1 2')
时,它将返回
id | c1 | c2
===============================
a | 1 | 2
b | 1 | 3
c | 1 | 1
d | 2 | 2
e | 2 | 3
f | 2 | 1
基本上是整个数据库。但我想要的是这个
id | c1 | c2
===============================
a | 1 | 2
f | 2 | 1
哪个行包含1和2的组合。
顺便说一句,我使用的是SQL 2008和ASP classic。
我非常感谢您的建议。
答案 0 :(得分:1)
我经常遇到这个问题。我使用的解决方案从来没有真正满足我的性能,但它确实有效。它正在加强我正在寻找的价值观。
SELECT *
FROM (
SELECT (T.C1 + '-' + T.C2) AS C3, *
FROM TABLE T
WHERE T.C1 IN (ALL VALUES FOR C1)
) T2
WHERE T2.C3 IN (ALL CONCATENATED VALUES)
如果类型是数字,您应该使用CONVERT或CAST到VARCHAR。
希望这有帮助。
编辑:由于缺少索引,我使用了包含错误。改为IN。
答案 1 :(得分:0)
尝试CONTAINS(*, ' "1" AND "2" ')
编辑 -
如果你想要列独立(即c1有一个单词而c2有另一个单词但是哪个列有哪个单词无关紧要)那么
(CONTAINS(c1,'1') AND CONTAINS(c2,'2'))
OR (CONTAINS(c1,'2') AND CONTAINS(c2,'1'))