Устаревшие объединения, такие как INNER JOIN
, создают повторяющиеся столбцы. Использование INNER JOIN
в вашем запросе создает два столбца с именем customer_id
. В языке SQL есть обходной путь: вы должны поставить перед столбцом переменную диапазона, как и другие здесь предлагают (хотя и используют вводящий в заблуждение термин «псевдоним таблицы»).
К счастью, язык SQL также имеет исправление для этой проблемы: NATURAL JOIN
не создает дублирующихся столбцов, поэтому вам не нужно устранять их неоднозначность:
SELECT
customer_id,
last_name,
amount
FROM customer
NATURAL JOIN payment
Объединения, которые создают повторяющиеся столбцы, остаются, потому что из языка SQL ничего не удаляется («оковы совместимости»). Но вам не нужно ничего, кроме NATURAL JOIN
.
Идея состоит в том, что имена ваших элементов данных означают одно и то же во всем словаре данных, например amount
означает одну вещь (относящуюся к платежам) и только одну вещь (не существует amount
, которая относится к клиентам или любому другому типу).
Иногда вам может понадобиться «спроецировать» столбцы, в которых вы не хотите участвовать NATURAL JOIN
например.
WITH
C AS ( SELECT customer_id, last_name FROM customer ),
P AS ( SELECT customer_id, amount FROM payment )
SELECT
customer_id,
last_name,
amount
FROM C
NATURAL JOIN P
Это также «защищает» ваш код, например в маловероятном случае, если кто-либо добавит атрибут last_name
к платежам.