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

Spojte tabulky ve sloupcích složeného cizího / primárního klíče v dotazu

Existuje NATURAL JOIN :

SELECT *
FROM   subscription
NATURAL JOIN delivery;

Citace příručky k SELECT :

Fungovalo by to pro vaše testovací nastavení, ale nedělá přesně to, co požadujete . Spojení je založeno na tom, že všechny sloupce sdílejí stejný název. Cizí klíče se neberou v úvahu. Případy, kdy NATURAL JOIN je to dobrý nápad, je jich málo a jsou daleko od sebe.

Zjednodušte kód / méně podrobný

Pro začátek můžete použít aliasy tabulek a nepotřebujete závorky kolem podmínek spojení s ON (na rozdíl od USING ):

SELECT *
FROM   subscription s
JOIN   delivery     d ON d.magazine_id = s.magazine_id
                     AND d.user_id = s.user_id;

Protože názvy sloupců v podmínkách spojení jsou identické, můžete je dále zjednodušit pomocí USING :

SELECT *
FROM   subscription s
JOIN   delivery     d USING (magazine_id, user_id);

Neexistuje žádná varianta syntaxe, která by automaticky spojovala na základě omezení cizího klíče. Museli byste se dotazovat na systémové katalogy a sestavit SQL dynamicky.



  1. Seznamte se s Michalem Barem a mnou na Microsoft Ignite!

  2. Použití LAST_INSERT_ID() v rámci víceřádkového vložení

  3. Tipy pro výkon XML

  4. Jak odstranit řádek v SQL