2010-02-10 5 views
8

나는이 같은 여러 열을 통해 여러 조건에 쿼리 CONTAINS 수행하려고 해요 : 나는 그것을 원하는처럼는 여러 열을 통해 여러 조건을 CONTAINS

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

그러나,이 쿼리가 작동하지 않습니다 : I 이 같은 모든 용어는 열 중 적어도 하나에 적어도 한 번 나타나는 모든 레코드를 반환 할 :이 쿼리는 올바른 결과를 반환

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

를하여도 모든 기간에 대한 별도의 절을 필요로 . 위 예제처럼 하나의 where 절을 사용하여 동일한 쿼리를 표현할 수있는 방법이 있습니까? 이것은 (고정) 함수에 쿼리를 포함 할 때 편리합니다.

답변

9

SQL Server은 한 번 이런 식으로 동작하지만 bug으로 간주되어 "수정 됨"으로 간주됩니다.

당신은 계산 된 열에서 FULLTEXT 인덱스를 생성해야합니다

MySQL에서
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') 

는 반대로, 전체 텍스트 색인 검색과 일치하는 모든 열에서 이는 문서화 된 동작입니다.

+1

와우 .. 믿을 수 없습니다. 감사. – dbaw

관련 문제