Sql Postgres:在列上选择Distinct不会返回带有联接的Distinct结果
我正在构建一个包含以下表格的系统:Sql Postgres:在列上选择Distinct不会返回带有联接的Distinct结果,sql,postgresql,join,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 "
- 歌
- 广播
- 站
- 跟随
- 使用者
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)的唯一歌曲?删除
“广播”。“在”
从DISTINCT
谓词创建,因为它返回的是非唯一值,因此重复歌曲。如果您需要使用此信息进行排序,请创建一个新问题。如果您在选择中返回“broadcasts.”“created_at”
?没有更改,我也只返回了该值。很抱歉,我应该在我的第一条评论中添加:返回的创建_在每一行上都是唯一的吗?是的,我只把它放在不同的位置,因为我在顺序中使用它,但这不是问题,因为两首歌几乎(完全?)不可能有相同的准确时间。这正是问题所在。您在一个几乎保证是唯一的字段上选择distinct。你可能应该把它从独特的条款中删除。谢谢,这实际上是我问题的重点,但我在这里发布了一个修改后的问题: