CONTIENT avec des termes multiples sur plusieurs colonnes
Question
Je suis en train d'effectuer une requête CONTAINS avec des termes multiples sur plusieurs colonnes, comme ceci:
SELECT ID
FROM Table
WHERE CONTAINS((Data1,Data2,Data3), '"foo" & "bag" & "weee"')
Cependant, cette requête ne se comporte pas comme je veux que ça: je veux revenir tous les enregistrements pour lesquels tous les termes apparaissent au moins une fois dans au moins l'une des colonnes, comme ceci:
SELECT ID
FROM Table
WHERE CONTAINS((Data1,Data2,Data3), '"foo"')
AND CONTAINS((Data1,Data2,Data3), '"bag"')
AND CONTAINS((Data1,Data2,Data3), '"weee"')
Bien que cette requête renvoie les résultats corrects, il a besoin d'un séparé et article pour chaque terme. Y at-il un moyen d'exprimer la même requête avec une seule clause where comme dans l'exemple supérieur? Ce serait pratique si l'on inclut la requête dans une fonction (fixe).
La solution
SQL Server
une fois se comportait de cette façon, mais il a été considéré comme un bug et "corrigée".
Vous devez créer un index de FULLTEXT
sur une colonne calculée:
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')
En MySQL
, au contraire, les recherches d'index de texte intégral et les matches dans toutes les colonnes, ce qui est un comportement documenté.