2010-02-10 29 views
8

Ben böyle birden çok sütun üzerinde birden şartlarına sorgusu, İÇEREN gerçekleştirmek çalışıyorum: Ben bunu istiyorum gibibirden çok sütun üzerinde birden terimlerle İÇEREN

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

Ancak bu sorgu davranmaz: Ben böyle, tüm terimler sütunlardan en az birinde en az bir kez göründükleri için tüm kayıtları döndürmek için istiyorum: Bu sorgu doğru sonuçlar verir

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

olsa, bütün dönem için ayrı vE-maddesini ihtiyacı . Aynı sorguyu, üst örnekte olduğu gibi tek bir yan cümleyle ifade etmenin bir yolu var mı? Sorgu (sabit) bir işlev dahil edildiğinde bu kullanışlı olurdu.

cevap

9

SQL Server bir kez bu şekilde davrandı, ancak bir bug ve "düzeltildi" olarak kabul edildi.

Sen hesaplanmış bir sütun üzerinde bir FULLTEXT dizin oluşturmak gerekir:

MySQL yılında
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') 

, tam tersine, tam metin dizin arar ve maçları tüm sütunlar arasında ve bu belgelenmiş bir davranıştır.

+1

Vay be .. İnanılmaz. Teşekkürler. – dbaw

İlgili konular