Đơn giản hơn, ngắn hơn, nhanh hơn với DISTINCT ON
của PostgreSQL :
SELECT DISTINCT ON (a.id)
a.id, a.name, a.date, b.code1, b.code2
FROM table_a a
LEFT JOIN table_b b USING (id)
ORDER BY a.id, b.sort
Chi tiết, giải thích, điểm chuẩn và liên kết trong câu trả lời có liên quan chặt chẽ này
.
Tôi sử dụng LEFT JOIN
, để các hàng từ table_a
không có bất kỳ hàng phù hợp nào trong table_b
không bị rớt.
Ghi chú bên lề:
Mặc dù được cho phép trong PostgreSQL, nhưng không khôn ngoan nếu sử dụng date
như tên cột. Đó là một từ dành riêng
trong mọi tiêu chuẩn SQL và một tên kiểu trong PsotgreSQL.
Nó cũng là một mô hình chống đặt tên cho cột ID id
. Không mô tả và không hữu ích. Một (trong số nhiều) quy ước đặt tên có thể có là đặt tên nó sau bảng nơi nó là khóa chính:table_a_id
. Cùng tên cho các khóa ngoại tham chiếu đến nó (nếu không có tên tự nhiên nào khác được ưu tiên).