sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan forbinder man kun én række i sammenføjet tabel med 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

Tjek distinct on

Med distinct på er det nødvendigt at inkludere de "distinkte" kolonner i order by . Hvis det ikke er den rækkefølge, du ønsker, skal du ombryde forespørgslen og genbestille

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

En anden løsning er at bruge en vinduesfunktion som i Lennarts svar. Og en anden meget generisk er denne

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. Beregning af hvilke punkter (breddegrad, længdegrad) er inden for en vis afstand i mysql?

  2. MySQL:Sådan opretter du trigger til indstilling af oprettelsesdato for nye rækker

  3. PHP Laravel:Der kunne ikke oprettes forbindelse, fordi målmaskinen aktivt afviste det

  4. MySQL - mysqldump --rutiner til kun at eksportere 1 lagret procedure (efter navn) og ikke hver rutine