De beste manier is om een nieuwe tabel te maken met de gemeenschappelijke velden van de drie andere tabellen en een index toe te voegen aan het gemeenschappelijke datumveld. De oorspronkelijke drie tabellen moeten een externe sleutel bevatten die naar de gemeenschappelijke tabel verwijst. Met dit ontwerp wordt de vraag eenvoudig:
SELECT *
FROM common_table
ORDER BY "date" DESC
LIMIT 100
Als u ook gegevens uit de meer specifieke tabellen nodig heeft, kunt u LEFT JOINs gebruiken om die gegevens ook in dezelfde query te selecteren.
Als u uw ontwerp niet kunt wijzigen en de prestaties geen probleem zijn, kunt u UNION ALL gebruiken om de resultaten van alle drie de tabellen te combineren voordat u gaat sorteren:
SELECT * FROM table1
UNION ALL
SELECT * FROM table2
UNION ALL
SELECT * FROM table3
ORDER BY "date" DESC
LIMIT 100
Merk op dat het bovenstaande alleen werkt als alle tabellen dezelfde structuur hebben. Als u velden hebt die in de ene tabel voorkomen, maar niet in andere, moet u ze weglaten uit de SELECT of anders NULL retourneren voor die kolom in de andere tabellen. Bijvoorbeeld als:
table1
heeft kolommena
,b
,c
endate
.table2
heeft kolommenb
,c
endate
.table3
heeft kolommena
,c
endate
.
Gebruik dan dit:
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