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

Unisci tabelle su colonne di chiave esterna/primaria composita in una query

C'è un NATURAL JOIN :

SELECT *
FROM   subscription
NATURAL JOIN delivery;

Citando il manuale su SELECT :

Funzionerebbe per la tua configurazione di prova, ma non esegue rigorosamente ciò che chiedi . La connessione si basa su tutte le colonne che condividono lo stesso nome. Le chiavi esterne non vengono considerate. I casi in cui NATURAL JOIN è una buona idea sono pochi e rari.

Semplifica il codice / meno dettagliato

Per cominciare, puoi usare alias di tabella e non hai bisogno di parentesi attorno alle condizioni di unione con ON (a differenza di USING ):

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

Poiché i nomi delle colonne nelle condizioni di unione sono identici, puoi semplificare ulteriormente con USING :

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

Non esiste una variante della sintassi che crea automaticamente join basati su vincoli di chiave esterna. Dovresti interrogare i cataloghi di sistema e creare l'SQL in modo dinamico.