PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm cách nào để chỉ tham gia một hàng trong bảng đã tham gia với 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

Kiểm tra distinct on

Với sự khác biệt, cần phải bao gồm các cột "khác biệt" theo thứ tự order by . Nếu đó không phải là thứ tự bạn muốn thì bạn cần kết thúc truy vấn và sắp xếp lại

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

Một giải pháp khác là sử dụng một hàm cửa sổ như trong câu trả lời của Lennart. Và một cái khác rất chung chung là cái này

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. postgresql date_trunc thành độ chính xác tùy ý?

  2. Làm thế nào để chạy một tập lệnh đặc biệt trong PostgreSQL?

  3. Rails và jsonb loại jsonb không tồn tại

  4. psql:không thể kết nối với máy chủ:Không có tệp hoặc thư mục như vậy (Mac OS X)

  5. Chuyển từ MySQL sang PostgreSQL - mẹo, thủ thuật và mẹo gì?