PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL:Wie man 3 nach Datum sortierte Tabellen vereinigt

Am besten erstellen Sie eine neue Tabelle, die die gemeinsamen Felder aus den drei anderen Tabellen enthält, und fügen einen Index für das gemeinsame Datumsfeld hinzu. Die ursprünglichen drei Tabellen sollten einen Fremdschlüssel enthalten, der mit der gemeinsamen Tabelle verknüpft ist. Mit diesem Design wird die Abfrage einfach:

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

Wenn Sie auch Daten aus den spezifischeren Tabellen benötigen, können Sie LEFT JOINs verwenden, um diese Daten auch in derselben Abfrage auszuwählen.

Wenn Sie Ihr Design nicht ändern können und die Leistung kein Problem darstellt, können Sie UNION ALL verwenden, um die Ergebnisse aus allen drei Tabellen vor dem Sortieren zu kombinieren:

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

Beachten Sie, dass das obige nur funktioniert, wenn alle Tabellen die gleiche Struktur haben. Wenn Sie Felder haben, die in einer Tabelle vorkommen, aber nicht in anderen, sollten Sie sie aus dem SELECT weglassen oder NULL für diese Spalte in den anderen Tabellen zurückgeben. Zum Beispiel wenn:

  • table1 hat Spalten a , b , c und date .
  • table2 hat Spalten b , c und date .
  • table3 hat Spalten a , c und date .

Verwenden Sie dann Folgendes:

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