sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL:3 tabellen samenvoegen, gesorteerd op datum

De beste manier is om een ​​nieuwe tabel te maken met de gemeenschappelijke velden van de drie andere tabellen en een index toe te voegen aan het gemeenschappelijke datumveld. De oorspronkelijke drie tabellen moeten een externe sleutel bevatten die naar de gemeenschappelijke tabel verwijst. Met dit ontwerp wordt de vraag eenvoudig:

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

Als u ook gegevens uit de meer specifieke tabellen nodig heeft, kunt u LEFT JOINs gebruiken om die gegevens ook in dezelfde query te selecteren.

Als u uw ontwerp niet kunt wijzigen en de prestaties geen probleem zijn, kunt u UNION ALL gebruiken om de resultaten van alle drie de tabellen te combineren voordat u gaat sorteren:

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

Merk op dat het bovenstaande alleen werkt als alle tabellen dezelfde structuur hebben. Als u velden hebt die in de ene tabel voorkomen, maar niet in andere, moet u ze weglaten uit de SELECT of anders NULL retourneren voor die kolom in de andere tabellen. Bijvoorbeeld als:

  • table1 heeft kolommen a , b , c en date .
  • table2 heeft kolommen b , c en date .
  • table3 heeft kolommen a , c en date .

Gebruik dan dit:

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. MySQL wordt twee keer lid van dezelfde tabel in dezelfde kolom met een andere waarde die alleen de meest recente rij retourneert

  2. Is er een logische reden om verschillende tabelruimte voor indexen te hebben?

  3. Niet te verwaarlozen verschil in uitvoeringsplan met Oracle bij gebruik van jdbc Timestamp of Date

  4. Waarom INNER JOIN niet gelijk is aan (!=) voor altijd hangen