查询的问题以匹配所有已连接的行

时间:2014-07-25 08:34:51

标签: sql sql-server

基本上,我正在尝试编写一个将充当我的搜索功能的存储过程。

假设我有三个表:PlacesPlaceFeatures和查找表PlacesPlaceFeatures

我目前正在将两个参数传递给我的存储过程@Query NVARCHAR(50)@FeaturesFilter VARCHAR(50)@Query参数包含关键字,@FeaturesFilter包含要匹配的逗号分隔的PlaceFeatureID列表。

为了使用以逗号分隔的列表,我实现了一个StringToTable拆分函数,它是一个表值函数。

目前,我的查询如下所示:

SELECT 
   p.Id, p.Name
FROM 
   Places p
INNER JOIN 
   PlacesPlaceFeatures ppf ON ppf.PlaceId = p.Id
INNER JOIN 
   StringToTable(@FeaturesFilter, ',') pf ON pf.Data = ppf.PlaceFeatureId
WHERE 
   FREETEXT(p.*, @Query) AND Deleted = 0

哪种方式有效。由于INNER JOIN,它会匹配包含我通过的PlaceFeatureID中任意一个的任何地方。我希望它只是在所有场所功能都存在的情况下匹配...

我无法将所有地方功能作为单独的参数添加到查询中,因为这是为了动态...

有没有办法在SQL Server中实现我想要的相对性能,或者我最好将我的搜索逻辑转移到像LUCENE.NET这样的东西?

感谢您的意见:)

干杯, 贾斯汀

0 个答案:

没有答案