Il modo migliore è creare una nuova tabella contenente i campi comuni delle altre tre tabelle e aggiungere un indice nel campo della data comune. Le tre tabelle originali dovrebbero contenere una chiave esterna che collega alla tabella comune. Con questo progetto la query diventa semplice:
SELECT *
FROM common_table
ORDER BY "date" DESC
LIMIT 100
Se hai bisogno anche i dati dalle tabelle più specifici è possibile utilizzare LEFT JOIN per selezionare, inoltre, che i dati nella stessa query.
Se non è possibile cambiare il tuo design e le prestazioni non è un problema, è possibile utilizzare UNION ALL per combinare i risultati di tutti e tre tavoli prima della cernita:
SELECT * FROM table1
UNION ALL
SELECT * FROM table2
UNION ALL
SELECT * FROM table3
ORDER BY "date" DESC
LIMIT 100
Si noti che quanto sopra funziona solo se tutte le tabelle hanno la stessa struttura. Se hai campi che si verificano in una tabella ma non in altri, dovresti ometterli da SELECT o altrimenti restituire NULL per quella colonna nelle altre tabelle. Per esempio se:
table1
ha colonne a
, b
, c
e date
.
table2
ha colonne b
, c
e date
.
table3
ha colonne a
, c
e date
.
Quindi utilizzare questo:
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
fonte
2010-11-20 12:10:08
E per quanto riguarda le prestazioni, se tre tabelle hanno molti record? – vietean