首页 > 解决方案 > MSSQL查询FREETEXTTABLE过滤

问题描述

SELECT * FROM tblA
--Result:
--[DocFileId]   Status
--1             0
--2             1
--3             0
--4             1
--5             1

SELECT * FROM FREETEXTTABLE(DB_B..DocOcrText, OcrText, 'Appointment', 5) as Key_Tbl
--Result:
--KEY       RANK
--1         500
--2         400
--3         300
--4         200
--5         200

SELECT * FROM tblA WHERE tblA.Status = 1
--Result:
--[DocFileId]   Status
--2             1
--4             1
--5             1

SELECT * FROM FREETEXTTABLE(DB_B..DocOcrText, OcrText, 'Appointment', 2) as Key_Tbl
--Result:
--KEY       RANK
--1         500
--2         400

SELECT * FROM tblA
INNER JOIN FREETEXTTABLE(DB_B..DocOcrText, OcrText, 'Appointment', 2) as Key_Tbl on tblA.[DocFileId] = Key_Tbl.[Key]
WHERE tblA.Status = 1
--Result:
--[DocFileId]   Status  KEY     RANK
--2             1       2       400

--EXPECTED RESULT 1:
--[DocFileId]   Status  KEY     RANK
--2             1       2       400
--4             1       4       200

--EXPECTED RESULT 2:
--[DocFileId]   Status  KEY     RANK
--2             1       2       400
--4             1       4       200
--5             1       5       200

这是我的问题的简化版本。在我的作品中,FREETEXTTABLE 的最高排名被设置为一个很大的数字,2000。

预期结果 1
无论如何,我要预先过滤 tblA.Status = 1 上的条件,然后将该结果对 FREETEXTTABLE(DB_B..DocOcrText, OcrText, 'Appointment', 2) 进行过滤以获得我的预期结果1?

预期结果 2
在更糟糕的情况下,由于键具有相同的排名,示例键 4 和 5 具有相同的排名 200。由于 FREETEXTTABLE 上的最高排名设置,最低的不会显示,无论如何我都显示甚至已经超过了最高排名?

标签: sql-server

解决方案


推荐阅读