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

PostgreSQL:Cách kết hợp 3 bảng được sắp xếp theo ngày

Cách tốt nhất là tạo một bảng mới chứa các trường chung từ ba bảng khác và thêm chỉ mục vào trường ngày chung. Ba bảng ban đầu phải chứa một khóa ngoại liên kết đến bảng chung. Với thiết kế này, truy vấn trở nên đơn giản:

SELECT *
FROM common_table
ORDER BY "date" DESC
LIMIT 100

Nếu bạn cũng cần dữ liệu từ các bảng cụ thể hơn, bạn có thể sử dụng LEFT JOINs để chọn dữ liệu đó trong cùng một truy vấn.

Nếu bạn không thể thay đổi thiết kế và hiệu suất không phải là vấn đề thì bạn có thể sử dụng UNION ALL để kết hợp các kết quả từ cả ba bảng trước khi sắp xếp:

SELECT * FROM table1
UNION ALL
SELECT * FROM table2
UNION ALL
SELECT * FROM table3
ORDER BY "date" DESC
LIMIT 100

Lưu ý rằng cách trên sẽ chỉ hoạt động nếu tất cả các bảng có cấu trúc giống nhau. Nếu bạn có các trường xuất hiện trong một bảng nhưng không xuất hiện trong các bảng khác thì bạn nên loại bỏ chúng khỏi SELECT hoặc trả về NULL cho cột đó trong các bảng khác. Ví dụ nếu:

  • table1 có các cột a , b , cdate .
  • table2 có các cột b , cdate .
  • table3 có các cột a , cdate .

Sau đó sử dụng cái này:

SELECT a, b, c, "date"
FROM table1
UNION ALL
SELECT NULL AS a, b, c, "date"
FROM table2
UNION ALL
SELECT a, NULL as b, c, "date"
FROM table3
ORDER BY "date" DESC
LIMIT 100


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chèn nhiều giá trị ENUM trong PostgreSQL

  2. mã trả về psql nếu không tìm thấy hàng nào

  3. Cách kiểm tra ngày trùng lặp trong PostgreSQL

  4. Postgres đặt hàng theo hiệu suất khóa nước ngoài?

  5. Sự khác biệt giữa RDBMS và ORDBMS