sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL:Hur man sammanför 3 tabeller sorterade efter datum

Det bästa sättet är att skapa en ny tabell som innehåller de gemensamma fälten från de tre andra tabellerna och lägga till ett index på det gemensamma datumfältet. De ursprungliga tre tabellerna bör innehålla en främmande nyckel som länkar till den gemensamma tabellen. Med denna design blir frågan enkel:

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

Om du också behöver data från de mer specifika tabellerna kan du använda LEFT JOINs för att också välja dessa data i samma fråga.

Om du inte kan ändra din design och prestanda inte är ett problem kan du använda UNION ALL för att kombinera resultaten från alla tre tabellerna innan du sorterar:

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

Observera att ovanstående bara fungerar om alla tabeller har samma struktur. Om du har fält som förekommer i en tabell men inte i andra bör du utelämna dem från SELECT eller returnera NULL för den kolumnen i de andra tabellerna. Till exempel om:

  • table1 har kolumner a , b , c och date .
  • table2 har kolumner b , c och date .
  • table3 har kolumner a , c och date .

Använd sedan detta:

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


  1. Hur man matar ut PL/SQL korrekt

  2. Rank funktion i MySQL

  3. MariaDB JSON-funktioner

  4. Konvertera en juliansk dag till ett datum i PostgreSQL