sql >> データベース >  >> RDS >> PostgreSQL

postgresを使用して結合テーブルの1つの行のみを結合するにはどうすればよいですか?

    select distinct on (author.id)
        book.id, author.id, author.name, book.title as last_book
    from
        author
        inner join
        book on book.author_id = author.id
    order by author.id, book.id desc
    

    distinct onを確認してください

    明確に区別する場合は、「明確な」列をorder byに含める必要があります。 。それが希望する順序でない場合は、クエリをラップして並べ替える必要があります

    select 
        *
    from (
        select distinct on (author.id)
            book.id, author.id, author.name, book.title as last_book
        from
            author
            inner join
            book on book.author_id = author.id
        order by author.id, book.id desc
    ) authors_with_first_book
    order by authors_with_first_book.name
    

    別の解決策は、レナートの答えのようにウィンドウ関数を使用することです。そしてもう1つの非常に一般的なものはこれです

    select 
        book.id, author.id, author.name, book.title as last_book
    from
        book
        inner join
        (
            select author.id as author_id, max(book.id) as book_id
            from
                author
                inner join
                book on author.id = book.author_id
            group by author.id
        ) s
        on s.book_id = book.id
        inner join
        author on book.author_id = author.id
    


    1. 名前が特定の文字列で始まるすべてのテーブルを削除します

    2. SQL Server 2012 ServicePack1および累積的な更新プログラム1

    3. MySQL-テーブル'my_table'はロックテーブルでロックされていません

    4. SQLServerのパスワードを忘れた