sql >> Base de Datos >  >> RDS >> PostgreSQL

Unir tablas en columnas de clave principal/foránea compuesta en una consulta

Hay una NATURAL JOIN :

SELECT *
FROM   subscription
NATURAL JOIN delivery;

Citando el manual en SELECT :

Funcionaría para su configuración de prueba, pero no está haciendo estrictamente lo que pide . La conexión se basa en que todas las columnas comparten el mismo nombre. No se consideran claves foráneas. Los casos en los que NATURAL JOIN es una buena idea son pocos y distantes entre sí.

Simplificar código / menos detallado

Para empezar, puede usar alias de tabla y no necesita paréntesis alrededor de las condiciones de unión con ON (a diferencia de USING ):

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

Dado que los nombres de columna en las condiciones de combinación son idénticos, puede simplificar aún más con USING :

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

No existe una variante de sintaxis que realice combinaciones basadas en restricciones de clave externa automáticamente. Tendría que consultar los catálogos del sistema y construir el SQL dinámicamente.