Nejlepším způsobem je vytvořit novou tabulku obsahující společná pole ze tří dalších tabulek a přidat index do pole společného data. Původní tři tabulky by měly obsahovat cizí klíč odkazující na společnou tabulku. S tímto návrhem se dotaz stává jednoduchým:
SELECT *
FROM common_table
ORDER BY "date" DESC
LIMIT 100
Pokud potřebujete také data z specifičtějších tabulek, můžete použít LEFT JOINs a vybrat tato data ve stejném dotazu.
Pokud nemůžete změnit svůj design a výkon není problém, můžete použít UNION ALL ke spojení výsledků ze všech tří tabulek před řazením:
SELECT * FROM table1
UNION ALL
SELECT * FROM table2
UNION ALL
SELECT * FROM table3
ORDER BY "date" DESC
LIMIT 100
Všimněte si, že výše uvedené bude fungovat pouze v případě, že všechny tabulky mají stejnou strukturu. Pokud máte pole, která se vyskytují v jedné tabulce, ale ne v jiných, měli byste je vynechat z SELECT nebo v ostatních tabulkách pro tento sloupec vrátit hodnotu NULL. Například pokud:
table1
má sloupcea
,b
,c
adate
.table2
má sloupceb
,c
adate
.table3
má sloupcea
,c
adate
.
Pak použijte toto:
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