1

我正在构建一个系统,其中有以下表格:

  • 歌曲
  • 播送
  • 车站
  • 跟随
  • 用户

用户关注电台,这些电台通过广播播放歌曲。

我正在根据用户关注的电台为用户构建歌曲“提要”。

这是查询:

SELECT DISTINCT ON ("broadcasts"."created_at", "songs"."id") songs.*
FROM "songs"
INNER JOIN "broadcasts" ON "songs"."shared_id" = "broadcasts"."song_id"
INNER JOIN "stations" ON "broadcasts"."station_id" = "stations"."id"
INNER JOIN "follows" ON "stations"."id" = "follows"."station_id"
WHERE "follows"."user_id" = 2
ORDER BY broadcasts.created_at desc
LIMIT 18

正如您在此处看到的,我收到重复的歌曲,这是因为我正在关注两个都播放同一首歌曲的电台:

sql在加入时无法正常工作

注意:shared_id 与 id 相同。

我的问题是:如何修改此查询,使其仅根据其 id(或 shared_id)返回唯一歌曲?

4

1 回答 1

3

"broadcasts"."created_at"从谓词中删除,DISTINCT因为它返回非唯一值,因此重复songs。如果您需要使用此信息进行排序,请创建一个新问题。

于 2012-07-07T00:49:09.107 回答