sql >> Database >  >> RDS >> PostgreSQL

Voeg tabellen samen op kolommen van samengestelde externe / primaire sleutel in een query

Er is een NATURAL JOIN :

SELECT *
FROM   subscription
NATURAL JOIN delivery;

Citaat van de handleiding op SELECT :

Het zou werken voor uw testopstelling, maar het doet niet strikt wat u vraagt . De verbinding is gebaseerd op alle kolommen met dezelfde naam. Buitenlandse sleutels worden niet in aanmerking genomen. De gevallen waarin NATURAL JOIN een goed idee is, zijn er maar weinig.

Code vereenvoudigen / minder uitgebreid

Om te beginnen zou je tabelaliassen kunnen gebruiken en je hebt geen haakjes nodig rond de join-voorwaarden met ON (in tegenstelling tot USING ):

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

Aangezien kolomnamen in de deelnamevoorwaarden identiek zijn, kunt u verder vereenvoudigen met USING :

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

Er is geen syntaxisvariant die automatisch joins maakt op basis van externe sleutelbeperkingen. Je zou de systeemcatalogi moeten doorzoeken en de SQL dynamisch moeten bouwen.



  1. Lastig GROUP BY-probleem op ORACLE

  2. Oracle DB Server + APEX + ORDS + JasperReports from scratch (Deel 4)

  3. Van .NET kan ik de volledige SQL-string krijgen die is gegenereerd door een SqlCommand-object (met SQL-parameters)?

  4. NVL2-functie in Oracle