sql >> Databasteknik >  >> RDS >> PostgreSQL

Sammanfoga tabeller på kolumner med sammansatt främmande/primärnyckel i en fråga

Det finns en NATURAL JOIN :

SELECT *
FROM   subscription
NATURAL JOIN delivery;

Citerar handboken om SELECT :

Det skulle fungera för din testinstallation, men det gör inte strikt vad du ber om . Kopplingen bygger på att alla kolumner delar samma namn. Främmande nycklar beaktas inte. De fall där NATURAL JOIN är en bra idé är få och långt emellan.

Förenkla koden / mindre utförlig

Till att börja med kan du använda tabellalias och du behöver inte ha parenteser runt anslutningsvillkoren med ON (till skillnad från med USING ):

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

Eftersom kolumnnamnen i anslutningsvillkoren är identiska kan du förenkla ytterligare med USING :

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

Det finns ingen syntaxvariant som automatiskt gör joins baserat på främmande nyckelbegränsningar. Du skulle behöva fråga systemkatalogerna och bygga SQL dynamiskt.



  1. Väntar på localhost, för alltid!

  2. PostgreSQL hittar vanliga kombinationer av par i samma kolumn

  3. Konvertera Google map v2 till google map v3

  4. MIN() vs LEAST() i MySQL:Vad är skillnaden?