PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Verknüpfen Sie Tabellen mit Spalten aus zusammengesetzten Fremd-/Primärschlüsseln in einer Abfrage

Es gibt einen NATURAL JOIN :

SELECT *
FROM   subscription
NATURAL JOIN delivery;

Zitieren von dem Handbuch zu SELECT :

Es würde für Ihr Test-Setup funktionieren, aber es tut nicht genau das, wonach Sie fragen . Die Verbindung basiert darauf, dass alle Spalten denselben Namen haben. Fremdschlüssel werden nicht berücksichtigt. Die Fälle, in denen NATURAL JOIN ist eine gute Idee, sind dünn gesät.

Code vereinfachen / weniger ausführlich

Für den Anfang könnten Sie Tabellenaliase verwenden und Sie brauchen keine Klammern um die Join-Bedingungen mit ON (anders als bei USING ):

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

Da die Spaltennamen in den Join-Bedingungen identisch sind, können Sie mit USING weiter vereinfachen :

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

Es gibt keine Syntaxvariante, die Joins basierend auf Fremdschlüsselbeschränkungen automatisch erstellt. Sie müssten die Systemkataloge abfragen und die SQL dynamisch erstellen.