Соединение таблиц

Соединение трёх и более таблиц

Содержание курса

Псевдонимы таблиц и ошибка ambiguous column

Когда в запросе участвуют три таблицы, одно и то же имя столбца почти неизбежно встречается в нескольких из них. Классический пример — столбец id или суррогатные ключи вида customer_id, order_id, product_id: они есть и в основной таблице, и в связанной.

Если написать просто order_id без указания источника, SQLite не знает, из какой таблицы брать значение, и возвращает ошибку:

ambiguous column name: order_id

Решение — квалифицировать имя псевдонимом: o.order_id, oi.order_id. Псевдоним объявляется прямо в FROM или JOIN через ключевое слово AS:

SELECT c.name        AS клиент,
       o.order_date  AS дата,
       p.title       AS товар
FROM   customers  AS c
JOIN   orders     AS o  ON c.customer_id = o.customer_id
JOIN   order_items AS oi ON o.order_id  = oi.order_id
JOIN   products   AS p  ON oi.product_id = p.product_id
ORDER BY c.name;

Здесь к разобранной выше цепочке добавлена четвёртая таблица customers, поэтому получилось три JOIN. Псевдонимы c, o, oi, p объявляются один раз и дальше используются везде: в SELECT, в условиях ON, в WHERE и ORDER BY. Полное имя таблицы после объявления псевдонима уже нельзя использовать — только псевдоним.

Столбцы, уникальные среди всех участвующих таблиц, технически можно писать без квалификатора. Но на практике единый стиль — всегда псевдоним.столбец — избавляет от ошибок при добавлении новой таблицы в запрос: имя, которое раньше было уникальным, может перестать им быть, и тогда SQLite завершит запрос ошибкой неоднозначного имени. Проще не делать исключений.

Начать заново?

Помощник начнёт новый диалог по этой задаче. Текущая переписка останется в истории до конца срока хранения.

О переписке

Можно приложить до трёх фото PNG, JPEG или WebP по 5 МБ.

Переписка и фото хранятся 90 дней после последнего принятого сообщения. Преподаватель получит доступ к диалогу, когда вы попросите его помочь.

Проверка решения остаётся отдельным действием.

Соединение трёх и более таблиц — SQL с нуля: бесплатный курс с практикой — Latorn