PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

PostgreSQL:Jak połączyć tabele 3 posortowane według daty

Najlepszym sposobem jest utworzenie nowej tabeli zawierającej wspólne pola z trzech pozostałych tabel i dodanie indeksu do wspólnego pola daty. Oryginalne trzy tabele powinny zawierać klucz obcy łączący ze wspólną tabelą. Dzięki takiemu projektowi zapytanie staje się proste:

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

Jeśli potrzebujesz również danych z bardziej szczegółowych tabel, możesz użyć LEFT JOIN, aby wybrać te dane w tym samym zapytaniu.

Jeśli nie możesz zmienić projektu, a wydajność nie stanowi problemu, możesz użyć UNION ALL, aby połączyć wyniki ze wszystkich trzech tabel przed posortowaniem:

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

Zauważ, że powyższe zadziała tylko wtedy, gdy wszystkie tabele mają tę samą strukturę. Jeśli masz pola, które występują w jednej tabeli, ale nie w innych, powinieneś je pominąć w SELECT lub zwrócić NULL dla tej kolumny w innych tabelach. Na przykład, jeśli:

  • table1 ma kolumny a , b , c i date .
  • table2 ma kolumny b , c i date .
  • table3 ma kolumny a , c i date .

Następnie użyj tego:

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. Jak znaleźć największą wartość w kolumnie w postgres sql?

  2. PostgreSQL:Jak zwrócić dynamiczne wiersze z tabeli bez używania listy definicji kolumn?

  3. psql:FATAL:uwierzytelnianie hasła nie powiodło się dla użytkownika

  4. Jak przekonwertować tablicę 2d z PostgreSQL DB na tablicę java 2d za pomocą JDBI?

  5. Problem z tygodniową alokacją godzin w Rails i Postgresql