sql >> Base de Datos >  >> RDS >> PostgreSQL

PostgreSQL:cómo unir 3 tablas ordenadas por fecha

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 columnas a , b , c y date .
  • table2 tiene columnas b , c y date .
  • table3 tiene columnas a , c y date .

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