PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Unir tabelas em colunas de chave estrangeira/primária composta em uma consulta


Existe um NATURAL JOIN :
SELECT *
FROM   subscription
NATURAL JOIN delivery;

Citando o manual sobre SELECT :

Funcionaria para sua configuração de teste, mas não está fazendo estritamente o que você pede . A conexão é baseada em todas as colunas que compartilham o mesmo nome. Chaves estrangeiras não são consideradas. Os casos em que NATURAL JOIN é uma boa idéia são poucos e distantes entre si.

Simplifique o código/menos verboso


Para começar, você pode usar aliases de tabela e não precisa de parênteses nas condições de junção com ON (diferente de USING ):
SELECT *
FROM   subscription s
JOIN   delivery     d ON d.magazine_id = s.magazine_id
                     AND d.user_id = s.user_id;

Como os nomes das colunas nas condições de junção são idênticos, você pode simplificar ainda mais com USING :
SELECT *
FROM   subscription s
JOIN   delivery     d USING (magazine_id, user_id);

Não há nenhuma variante de sintaxe fazendo junções com base em restrições de chave estrangeira automaticamente. Você teria que consultar os catálogos do sistema e construir o SQL dinamicamente.