我正在建立一个系统,其中有以下表格:
歌曲
广播
车站
跟随
用户
用户跟踪电台,电台通过广播播放歌曲。
我正在为一个用户建立一个基于他们跟踪的电台的歌曲“feed”。
以下是问题:
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
正如你在这里看到的,我收到了重复的歌曲,这是因为我跟踪了两个电台,它们都播放了同一首歌:
注意:共享id与id相同。
我的问题是:如何修改此查询,使其仅返回基于其id(或共享id)的唯一歌曲?
最佳答案
从"broadcasts"."created_at"
谓词中删除DISTINCT
,因为它返回的值不唯一,因此重复songs
。如果需要使用此信息进行排序,请创建新问题。
关于sql - Postgres:在列上选择Distinct不会通过Joins返回不同的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11370422/