开发者

SQL - Complicated lookup query

开发者 https://www.devze.com 2023-03-25 02:21 出处:网络
I need help with a complicated query. I have a Venues table, a Tag table and a Venues_Tag_lookup table. When I have the detail of a single venue on screen I would like to be able to show other venues

I need help with a complicated query. I have a Venues table, a Tag table and a Venues_Tag_lookup table. When I have the detail of a single venue on screen I would like to be able to show other venues that are similar to the current venue.

This will require a query that returns the t开发者_运维问答op 5 venues with the most amount of matching tags. (I'm using MSSQL)

Here is a simple layout of how my tables look.

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

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

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

If you have any question please ask.

Thanks in advance.


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


following query may help:

-- params = @venueId, @tagId

select
        venueId,
        venueName,
        (select count * from venues_tag_lookup vtl where vtl.venueid=v.venueid )tagCount
from venues_tbl v
where venueId in(
  select venueId from Venues_tag_lookup where tagId = @tagId
)
and venueId  @venueId
order by 3 desc
0

精彩评论

暂无评论...
验证码 换一张
取 消