PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL:come unire 3 tabelle ordinate per data

Il modo migliore è creare una nuova tabella contenente i campi comuni delle altre tre tabelle e aggiungere un indice sul campo comune della data. Le tre tabelle originali dovrebbero contenere una chiave esterna collegata alla tabella comune. Con questo design la query diventa semplice:

SELECT *
FROM common_table
ORDER BY "date" DESC
LIMIT 100

Se hai bisogno anche di dati da tabelle più specifiche, puoi utilizzare LEFT JOIN per selezionare anche quei dati nella stessa query.

Se non puoi modificare il design e le prestazioni non sono un problema, puoi utilizzare UNION ALL per combinare i risultati di tutte e tre le tabelle prima di ordinare:

SELECT * FROM table1
UNION ALL
SELECT * FROM table2
UNION ALL
SELECT * FROM table3
ORDER BY "date" DESC
LIMIT 100

Nota che quanto sopra funzionerà solo se tutte le tabelle hanno la stessa struttura. Se hai campi che si trovano in una tabella ma non in altre, dovresti ometterli da SELECT oppure restituire NULL per quella colonna nelle altre tabelle. Ad 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 usa 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