Den bedste måde er at oprette en ny tabel, der indeholder de fælles felter fra de tre andre tabeller og tilføje et indeks på det fælles datofelt. De oprindelige tre tabeller skal indeholde en fremmednøgle, der linker til den fælles tabel. Med dette design bliver forespørgslen enkel:
SELECT *
FROM common_table
ORDER BY "date" DESC
LIMIT 100
Hvis du også har brug for data fra de mere specifikke tabeller, kan du bruge LEFT JOINs til også at vælge disse data i den samme forespørgsel.
Hvis du ikke kan ændre dit design, og ydeevnen ikke er et problem, kan du bruge UNION ALL til at kombinere resultaterne fra alle tre tabeller før sortering:
SELECT * FROM table1
UNION ALL
SELECT * FROM table2
UNION ALL
SELECT * FROM table3
ORDER BY "date" DESC
LIMIT 100
Bemærk, at ovenstående kun virker, hvis alle tabeller har samme struktur. Hvis du har felter, der forekommer i én tabel, men ikke i andre, bør du udelade dem fra SELECT eller returnere NULL for den kolonne i de andre tabeller. For eksempel hvis:
table1
har kolonnera
,b
,c
ogdate
.table2
har kolonnerb
,c
ogdate
.table3
har kolonnera
,c
ogdate
.
Brug derefter denne:
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