sql >> Databáze >  >> RDS >> PostgreSQL

PostgreSQL:Jak sjednotit 3 tabulky seřazené podle data

Nejlepším způsobem je vytvořit novou tabulku obsahující společná pole ze tří dalších tabulek a přidat index do pole společného data. Původní tři tabulky by měly obsahovat cizí klíč odkazující na společnou tabulku. S tímto návrhem se dotaz stává jednoduchým:

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

Pokud potřebujete také data z specifičtějších tabulek, můžete použít LEFT JOINs a vybrat tato data ve stejném dotazu.

Pokud nemůžete změnit svůj design a výkon není problém, můžete použít UNION ALL ke spojení výsledků ze všech tří tabulek před řazením:

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

Všimněte si, že výše uvedené bude fungovat pouze v případě, že všechny tabulky mají stejnou strukturu. Pokud máte pole, která se vyskytují v jedné tabulce, ale ne v jiných, měli byste je vynechat z SELECT nebo v ostatních tabulkách pro tento sloupec vrátit hodnotu NULL. Například pokud:

  • table1 má sloupce a , b , c a date .
  • table2 má sloupce b , c a date .
  • table3 má sloupce a , c a date .

Pak použijte toto:

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 MONTHNAME() z čísel

  2. Je to v detailech

  3. Jak nastavit řádek MySQL na READ-ONLY?

  4. vztahy rodič dítě