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 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 las tablas más específicos que se pueden utilizar LEFT JOIN seleccionar también que los datos en la misma consulta.
Si no puede cambiar su diseño y el rendimiento no es un problema, puede utilizar UNION ALL para combinar los resultados de las tres mesas antes de la clasificación:
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 sólo funcionará si todas las tablas tienen la misma estructura. Si tiene campos que aparecen en una tabla pero no en otras, entonces debe omitirlos de SELECT o bien devolver NULL para esa columna en las otras tablas. Por ejemplo, si:
table1
tiene columnas a
, b
, c
y date
.
table2
tiene columnas b
, c
y date
.
table3
tiene columnas a
, c
y date
.
A continuación, utilice la siguiente:
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
¿Qué hay de rendimiento, si tres tablas tienen muchos registros? – vietean