Postgres:在列上选择Distinct不会返回与Joins不同的结果

时间:2012-07-06 22:23:02

标签: sql postgresql join

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

  • 广播
  • 按照
  • 用户

用户关注通过广播在其上播放歌曲的电台。

我正在为用户根据他们关注的电台制作歌曲的“馈送”。

以下是查询:

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 not working distinct on join

注意:shared_id与id相同。

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

1 个答案:

答案 0 :(得分:3)

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