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