9

次のように、複数の列に対して複数の用語を使用して CONTAINS クエリを実行しようとしています。

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

ただし、このクエリは意図したとおりに動作しません。次のように、すべての用語が少なくとも 1 つの列に少なくとも 1 回出現するすべてのレコードを返したいと考えています。

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

このクエリは正しい結果を返しますが、用語ごとに個別の AND 句が必要です。上の例のように、単一の where 句で同じクエリを表現する方法はありますか? これは、クエリを (固定) 関数に含める場合に便利です。

4

1 に答える 1

9

SQL Serverかつてはこのように動作しましたが、バグと見なされて「修正」されました。

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逆に、フルテキスト インデックスはすべての列を検索して一致させます。これは文書化された動作です。

于 2010-02-10T14:56:20.547 に答える