La mejor manera es crear una nueva tabla que contenga los campos comunes de las otras tres tablas y agregar un índice en el campo de fecha común. Las tres tablas originales deben contener una clave externa que se vincule a la tabla común. Con este diseño la consulta se vuelve simple:
SELECT *
FROM common_table
ORDER BY "date" DESC
LIMIT 100
Si también necesita datos de tablas más específicas, puede usar LEFT JOIN para seleccionar también esos datos en la misma consulta.
Si no puede cambiar su diseño y el rendimiento no es un problema, puede usar UNION ALL para combinar los resultados de las tres tablas antes de ordenar:
SELECT * FROM table1
UNION ALL
SELECT * FROM table2
UNION ALL
SELECT * FROM table3
ORDER BY "date" DESC
LIMIT 100
Tenga en cuenta que lo anterior solo funcionará si todas las tablas tienen la misma estructura. Si tiene campos que aparecen en una tabla pero no en otras, debe omitirlos de SELECT o devolver NULL para esa columna en las otras tablas. Por ejemplo si:
table1
tiene columnasa
,b
,c
ydate
.table2
tiene columnasb
,c
ydate
.table3
tiene columnasa
,c
ydate
.
Entonces usa esto:
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