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

PostgreSQL:Sådan samler du 3 tabeller sorteret efter dato

Den bedste måde er at oprette en ny tabel, der indeholder de fælles felter fra de tre andre tabeller og tilføje et indeks på det fælles datofelt. De oprindelige tre tabeller skal indeholde en fremmednøgle, der linker til den fælles tabel. Med dette design bliver forespørgslen enkel:

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

Hvis du også har brug for data fra de mere specifikke tabeller, kan du bruge LEFT JOINs til også at vælge disse data i den samme forespørgsel.

Hvis du ikke kan ændre dit design, og ydeevnen ikke er et problem, kan du bruge UNION ALL til at kombinere resultaterne fra alle tre tabeller før sortering:

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

Bemærk, at ovenstående kun virker, hvis alle tabeller har samme struktur. Hvis du har felter, der forekommer i én tabel, men ikke i andre, bør du udelade dem fra SELECT eller returnere NULL for den kolonne i de andre tabeller. For eksempel hvis:

  • table1 har kolonner a , b , c og date .
  • table2 har kolonner b , c og date .
  • table3 har kolonner a , c og date .

Brug derefter denne:

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. Sådan forespørges SQL-tabel og fjerne dublerede rækker fra et resultatsæt

  2. Hvordan får man datoer, der er mellem sidste mandag til den nuværende dag?

  3. Sådan formateres SQLite-resultater som en tabel

  4. PostgreSQL plpgsql få nuværende procedurer oid