1

我需要有关复杂查询的帮助。我有一张Venues桌子,一张Tag桌子和一张Venues_Tag_lookup桌子。当我在屏幕上显示单个场地的详细信息时,我希望能够显示与当前场地相似的其他场地。

这将需要一个查询来返回匹配标签数量最多的前 5 个场所。(我正在使用 MSSQL)

这是我的表格外观的简单布局。

Venues_tbl
----------
VenueId
Venue_name

Tag_tbl
---------
TagId
Tag_name

Venues_Tag_lookup
------------------
Venue_tagId
VenueId
TagId

如果您有任何问题,请提出。

提前致谢。

4

2 回答 2

1
SELECT TOP 5
   V.Venue_name
FROM
   -- this = tags for this venue
   Venues_Tag_lookup this
   JOIN
   -- others = tags for other venues
   Venues_Tag_lookup others
            --see what matches, there will be a big pile of them
            ON this.TagId = others.TagId
   JOIN
   Venues_tbl V ON others.VenueID = V.VenueID
WHERE
   --filter to this and others
   this.VenueID = @TheOneOnScreen
   AND
   others.VenueID <> @TheOneOnScreen
GROUP BY
   --collapse to other venues ...
   V.Venue_name
ORDER BY
   -- ... and simply COUNT matches
   COUNT(*) DESC
于 2011-08-03T08:34:59.990 回答
-1

以下查询可能会有所帮助:

-- 参数 = @venueId, @tagId

选择
        场地ID,
        场地名称,
        (从venues_tag_lookup vtl中选择计数*,其中vtl.venueid=v.venueid)tagCount
从场地_tbl v
地点 ID 在哪里(
  从 Venues_tag_lookup 中选择场地 ID,其中 tagId = @tagId
)
和场地 ID @venueId
按 3 desc 排序
于 2011-08-03T08:34:29.477 回答