sql >> Database teknologi >  >> RDS >> PostgreSQL

Sammenføj tabeller på kolonner med sammensat fremmed / primær nøgle i en forespørgsel

Der er en NATURAL JOIN :

SELECT *
FROM   subscription
NATURAL JOIN delivery;

Citerer manualen om SELECT :

Det ville fungere for din testopsætning, men det gør ikke strengt taget det, du beder om . Forbindelsen er baseret på, at alle kolonner deler samme navn. Fremmednøgler tages ikke i betragtning. De tilfælde, hvor NATURAL JOIN er en god idé, der er få og langt imellem.

Forenkle kode/mindre udførligt

Til at begynde med kan du bruge tabelaliaser, og du behøver ikke parenteser omkring joinbetingelserne med ON (i modsætning til med USING ):

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

Da kolonnenavne i forbindelsesbetingelserne er identiske, kan du forenkle yderligere med USING :

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

Der er ingen syntaksvariant, der automatisk laver joins baseret på fremmednøglebegrænsninger. Du bliver nødt til at forespørge systemkatalogerne og bygge SQL dynamisk.



  1. pgbouncer - lukker fordi:uren server på hver forbindelse

  2. MySQL INSERT og SELECT Rækkefølge

  3. MySQL-forbindelse over SSL med Laravel

  4. postgreSQL ændre kolonnedatatype til tidsstempel uden tidszone