SELECT A.a, B.b, akt.[Rank] + bkt.[Rank] /2 AS [Rank]
FROM B b
INNER JOIN Publication a ON a.Id = b.Id
INNER JOIN FREETEXTTABLE(A, a, 'search text') akt ON a.Id = akt.[Key]
INNER JOIN FREETEXTTABLE(B, b, 'search text') bkt ON b.Id = bkt.[Key]
ORDER BY [Rank] DESC
UNION
SELECT A.a, null as B.b, akt.[Rank] as [Rank]
FROM A a
INNER JOIN FREETEXTTABLE(A, a, 'search text') akt ON a.Id = akt.[Key]
UNION
SELECT null as A.a, B.b, bkt.[Rank] as [Rank]
FROM B b
INNER JOIN FREETEXTTABLE(A, a, 'search text') akt ON a.Id = akt.[Key]
以上查询用于跨两个表搜索记录(使用排名)。使用跨多个表的全文搜索搜索记录
第一个查询:只有那些记录显示在两个表格的两列中的搜索文本中。
第二个查询:只有那些记录,SEARCHTEXT仅在列的表的
第三个查询:只有那些记录,SEARCHTEXT仅列B表B中
我的问题是:如果我必须搜索4或5个表格,联合会的数量会疯狂增加。它也会太复杂和缓慢。
那么,有没有其他方法可以减少这些联盟? 我试过了Views,但是它们不能被全文索引。
谢谢雨,这是工作,但排名仅来为那些同时在列的记录,对于其他人来说,排名= NULL – Marcus25 2012-07-27 07:24:18
是,排名将是无效的。那就是为什么我告诉你用套子来计算等级。请显示您正在使用的确切脚本,然后我会检查。 – Narendra 2012-07-27 07:33:52