Ответ 1
Существует NATURAL JOIN
:
SELECT *
FROM subscription
NATURAL JOIN delivery;
Цитируя руководство по SELECT
:
NATURAL
NATURAL
- сокращение от спискаUSING
, в котором упоминаются все столбцы в двух таблицах с одинаковыми именами.
Он будет работать для вашей тестовой установки, но он не выполняет в точности то, что вы просите. Соединение основано на всех столбцах с одинаковым именем. Внешние ключи не рассматриваются. Случаи, когда NATURAL JOIN
является хорошей идеей, немногочисленны.
Упростить код/меньше подробностей
Для начала вы можете использовать псевдонимы таблиц, и вам не нужны скобки вокруг условий соединения с ON
(в отличие от USING
):
SELECT *
FROM subscription s
JOIN delivery d ON d.magazine_id = s.magazine_id
AND d.user_id = s.user_id;
Поскольку имена столбцов в условиях объединения идентичны, вы можете еще больше упростить с помощью USING
:
SELECT *
FROM subscription s
JOIN delivery d USING (magazine_id, user_id);
Нет синтаксического варианта, позволяющего автоматически объединять соединения на основе ограничений внешнего ключа. Вам придется запрашивать системные каталоги и динамически создавать SQL.