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 kolumnya
,b
,c
idate
.table2
ma kolumnyb
,c
idate
.table3
ma kolumnya
,c
idate
.
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