2012-07-06 11 views
1

나는 시스템을 구축하고있어 합류와 함께 열 고유 선택은 별개의 결과를 반환하지 않은 다음과 같은 테이블이 있습니다 : 포스트 그레스 :

  • 팔로우

    • 노래
    • 방송
    • 사용자

    사용자는 그래서이 역을, 다음 방송을 통해 그들에 ngs.

    나는 그들이 따르는 방송국을 기반으로 한 사용자를 위해 "피드"를 제작하고 있습니다.

    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)를 기반으로 고유 한 노래 만 반환하도록 어떻게 수정합니까?

  • +0

    ''SELECT '에''broadcasts "."created_at "'를 반환하면 어떻게됩니까? –

    +0

    변화가 없습니다. 단지 그 값을 돌려주었습니다. –

    +0

    죄송합니다. 첫 번째 코멘트에 추가해야합니다. 반환 된 created_at는 모든 행에서 고유합니까? –

    답변

    3

    이 아닌 고유 한 값을 반환하기 때문에 DISTINCT 조건에서 제거 "broadcasts"."created_at", 따라서 songs 중복. 이 정보를 사용하여 정렬하려면 새 질문을 만드십시오.

    +0

    고마워, 사실 내 질문의 요점 이었지만 여기에 수정 된 질문을 게시했습니다 : http : // stackoverflow .com/questions/11371656/order-by-join-column-but-use-distinct-on-another –