يحتوي على شروط متعددة على أعمدة متعددة

StackOverflow https://stackoverflow.com/questions/2237443

  •  19-09-2019
  •  | 
  •  

سؤال

أحاول إجراء استعلام يحتوي على مصطلحات متعددة على أعمدة متعددة، مثل هذا:

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"')

على الرغم من إرجاع هذا الاستعلام النتائج الصحيحة، إلا أنه يحتاج إلى بند منفصل لكل مصطلح. هل هناك طريقة للتعبير عن نفس الاستعلام مع بند واحد مثل في المثال العلوي؟ سيكون هذا مناسبا عند إدراج الاستعلام في وظيفة (ثابت).

هل كانت مفيدة؟

المحلول

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, على العكس من ذلك، يبحث مؤشر النص الكامل ومطابقات عبر جميع الأعمدة وهذا هو سلوك موثق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top