Am besten erstellen Sie eine neue Tabelle mit den gemeinsamen Feldern aus den drei anderen Tabellen und fügen einen Index für das Feld für das gemeinsame Datum hinzu. Die ursprünglichen drei Tabellen sollten einen Fremdschlüssel enthalten, der mit der allgemeinen 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 auch links in derselben Abfrage verwenden Joins, die Daten auszuwählen.
Wenn Sie nicht Ihr Design ändern und die Leistung ist kein Problem, dann können Sie UNION ALL verwenden, um die Ergebnisse aus allen drei Tabellen zu kombinieren vor dem Sortieren:
SELECT * FROM table1
UNION ALL
SELECT * FROM table2
UNION ALL
SELECT * FROM table3
ORDER BY "date" DESC
LIMIT 100
Beachten Sie, dass die oben funktioniert nur, wenn Alle Tabellen haben die gleiche Struktur. Wenn Sie Felder haben, die in einer Tabelle vorkommen, aber nicht in anderen, dann sollten Sie sie aus dem SELECT weglassen oder sonst NULL für diese Spalte in den anderen Tabellen zurückgeben. wenn zum Beispiel:
table1
hat Spalten a
, b
, c
und date
.
table2
hat Spalten b
, c
und date
.
- hat Spalten
a
, c
und date
.
Dann verwenden:
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
Wie wäre es mit der Leistung, wenn drei Tabellen viele Datensätze haben? – vietean