【问题标题】:CONTAINS with multiple terms over multiple columnsCONTAINS 在多列中包含多个术语
【发布时间】:2011-01-15 07:09:27
【问题描述】:

我正在尝试对多个列执行包含多个术语的 CONTAINS 查询,如下所示:

SELECT ID
FROM Table
WHERE CONTAINS((Data1,Data2,Data3), '"foo" & "bag" & "weee"')

但是,此查询的行为不像我希望的那样:我希望它返回所有术语在至少一列中至少出现一次的所有记录,如下所示:

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

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

【问题讨论】:

    标签: sql contains


    【解决方案1】:

    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, 'foo bar', 'bax', 'text')
    
    
    SELECT  *
    FROM    t_ft
    WHERE   CONTAINS (*, 'foo AND baz') 
    

    相反,在MySQL 中,全文索引搜索并匹配所有列,这是记录在案的行为。

    【讨论】:

      猜你喜欢
      • 2014-03-13
      • 2012-12-03
      • 2012-01-17
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 2018-11-11
      • 1970-01-01
      • 2017-02-08
      相关资源
      最近更新 更多