【发布时间】:2025-12-06 12:15:01
【问题描述】:
我正在为使用标签的歌曲创建搜索引擎,但在构建列出所有与标签匹配的歌曲的 SQL 查询时遇到了麻烦。
数据库如下所示: http://i.imgur.com/5zmfAz8.png
歌曲通过一个中间表(SongTags)有很多标签。
我们以人口为例:
标签: 电子、器乐、活力、忧郁、声乐、摇滚
歌曲: SongA(电音、忧郁、声乐) SongB(器乐、忧郁、摇滚) SongC(充满活力,声乐)
搜索应该返回包含所有请求标签的歌曲。
搜索1:
“Vocal”返回:SongA、SongB
搜索2:
“Vocal”、“Energetic”回归:SongC
搜索3:
“人声”、“精力充沛”、“电”返回:什么都没有
我知道如何在 1 个标签上进行搜索,而不是在多个标签上进行搜索。 以 Search1 为例,我知道这会起作用:
SELECT * FROM "songs"
INNER JOIN "song_tags" ON "song_tags"."song_id" = "songs"."id"
INNER JOIN "tags" ON "tags"."id" = "song_tags"."tag_id"
WHERE "tags"."name" = 'Vocal'
但是我不知道如何执行 Search2,因为我需要歌曲包含“Vocal”和“Energetic”。
编辑:
我正在使用 PostgreSQL
【问题讨论】:
标签: sql ruby-on-rails postgresql subquery nested-queries