加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 包含多个列上的多个术语的CONTAINS

发布时间:2020-12-12 06:34:19 所属栏目:MsSql教程 来源:网络整理
导读:我正在尝试在多个列上执行包含多个术语的CONTAINS查询,如下所示: SELECT IDFROM TableWHERE CONTAINS((Data1,Data2,Data3),'"foo" "bag" "weee"') 但是,此查询的行为与我想要的不一样:我希望它返回所有记录,其中所有条目在至少一个列中至少出现一次,如下所
我正在尝试在多个列上执行包含多个术语的CONTAINS查询,如下所示:
SELECT ID
FROM Table
WHERE CONTAINS((Data1,Data2,Data3),'"foo" & "bag" & "weee"')

但是,此查询的行为与我想要的不一样:我希望它返回所有记录,其中所有条目在至少一个列中至少出现一次,如下所示:

SELECT ID
FROM Table
WHERE CONTAINS((Data1,'"foo"')
AND CONTAINS((Data1,'"bag"')
AND CONTAINS((Data1,'"weee"')

虽然此查询返回正确的结果,但每个术语都需要一个单独的AND子句.有没有办法用上面的例子中的单个where子句表达相同的查询?当在(固定)函数中包含查询时,这将是方便的.

解决方法

SQL Server曾经以这种方式运行,但它被认为是 bug并且“已更正”.

您需要在计算列上创建FULLTEXT索引:

DROP TABLE t_ft
CREATE TABLE t_ft (id INT NOT NULL,data1 NVARCHAR(MAX) NOT NULL,data2 NVARCHAR(MAX) NOT NULL,data3 NVARCHAR(MAX) NOT NULL,totaldata AS data1 + ' ' + data2 + ' ' + data3,CONSTRAINT pk_ft_id PRIMARY KEY (id))

CREATE FULLTEXT INDEX ON t_ft (totaldata LANGUAGE 1033) KEY INDEX pk_ft_id

INSERT
INTO    t_ft
VALUES  (1,'foo bar','baz','text')

INSERT
INTO    t_ft
VALUES  (2,'bax','text')


SELECT  *
FROM    t_ft
WHERE   CONTAINS (*,'foo AND baz')

相反,在MySQL中,全文索引在所有列中进行搜索和匹配,这是一种记录在案的行为.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读