PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie verbinde ich nur eine Zeile in einer verknüpften Tabelle mit Postgres?

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

Aktivieren Sie distinct on

Bei „distinct on“ müssen die „distinct“-Spalten in order by aufgenommen werden . Wenn dies nicht die gewünschte Reihenfolge ist, müssen Sie die Abfrage umbrechen und neu anordnen

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

Eine andere Lösung besteht darin, eine Fensterfunktion wie in Lennarts Antwort zu verwenden. Und noch ein sehr allgemeiner ist dieser

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