Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Postgres:在列上选择Distinct不会返回带有联接的Distinct结果_Sql_Postgresql_Join - Fatal编程技术网

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。你可能应该把它从独特的条款中删除。谢谢,这实际上是我问题的重点,但我在这里发布了一个修改后的问题: