SQL - сложный поисковый запрос

Мне нужна помощь со сложным запросом. у меня есть Venues стол, Tag стол и Venues_Tag_lookup Таблица. Когда у меня есть детали одного места на экране, я хотел бы иметь возможность показывать другие места, которые похожи на текущее место.

Для этого потребуется запрос, который возвращает 5 лучших мест с наибольшим количеством совпадающих тегов. (Я использую MSSQL)

Вот простой макет того, как выглядят мои таблицы.

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

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

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

Если у вас есть какие-либо вопросы, пожалуйста, задавайте.

Заранее спасибо.

2 ответа

Решение
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

Следующий запрос может помочь:

- params = @venueId, @tagId

Выбрать
        venueId,
        venueName,
        (выберите count * из venues_tag_lookup vtl, где vtl.venueid=v.venueid)tagCount
от venues_tbl v
где место проведения в (выберите venueId из Venues_tag_lookup, где tagId = @tagId)
и venueId @venueId
заказать по 3 дес
Другие вопросы по тегам