ORA-00918 (или #1052 в MySQL): частые ошибки новичков

2 минуты на чтение

В этом посту вы узнаете, что значит ошибка «ORA-00918: column ambiguously defined» и как её решить. Ошибка возникает, когда при объединении в двух таблицах присутствуют колонки с одинаковым названием и непонятно, к какой таблице относится колонка.

Для воспроизведения ошибки, создаём две простых таблицы с одинаковыми колонками — цифровой и текстовой. И number_column, и text_column присутствуют в обоих таблицах.

CREATE TABLE test_table1(number_column NUMBER, text_column VARCHAR2(50) )
CREATE TABLE test_table2(number_column NUMBER, text_column VARCHAR2(50) )

Выпоняем запрос SQL с объединением через JOIN, выбираем значения number_column, text_column из таблиц test_table1 и test_table2, в которых number_column из одной равняется number_column из другой, и number_column равняется единице.

SELECT number_column, text_column FROM test_table1 JOIN test_table2 ON number_column = number_column WHERE number_column = 1

Уже прочитав предложение сразу становится понятным, что невозможно определить к какой из двух таблиц относится number_column, а также text_column, что менее очевидно. После выполнения запроса Apex SQL Workshop (или любой другой инструмент для работы с базами данных Oracle) выдаёт такую ошибку:

Ошибка ORA-00918: column ambiguously defined

Скриншот 1: Ошибка ORA-00918: column ambiguously defined

Исправить ситуацию можно двумя методами. В первом просто прописывает название таблицы перед названием колонки.

SELECT test_table1.number_column, test_table1.text_column FROM test_table1 JOIN test_table2 ON test_table1.number_column = test_table2.number_column WHERE test_table1.number_column = 1

Второй метод удобнее. В нём используются алиасы названий таблиц, в нашем примере t1 для test_table1 и t2 для test_table2.

SELECT t1.number_column, t1.text_column FROM test_table1 t1 JOIN test_table2 t2 ON t1.number_column = t2.number_column WHERE t1.number_column = 1

Кстати, в MySQL эта ошибка называется «#1052 — Column ‘number_column’ in field list is ambiguous» и лечится тем же способом. phpMyAdmin выдаёт при такой ошибке следующее сообщение:

Скриншот 2: MySQL #1052 - Column 'number_column' in field list is ambiguous

Скриншот 2: Ошибка MySQL #1052 — Column in field list is ambiguous

Понравился пост? Поделись в соцсетях и подписывайся на аккаунты в Twitter и Facebook!
Facebook Vk Ok LinkedIn Telegram Whatsapp

Похожие записи:

Сегодня при перезапуске базы данных, а перезапускал я базу данных Oracle в первый раз в жизни (в личных целях я пользуюсь практически только «мускулом» — MySQL), возникла проблема и с мыслями «наверное это надолго» я начал рыться в интернетах. К счастью, решение удалось найти дов...
В этой статье я хочу рассказать, про заработок на партнерских программах через свой сайт. Я думаю эта тема сейчас более актуальна для новичков. Здравствуйте, уважаемые друзья! Для новичков. Эта статья касается больше новичков, потому что многие новички говорят, зачем мне с...
Здравствуйте, друзья. Правильное написание статей: сегодня мы поговорим о том, какое значение имеет правильное написание статей для новичков. На какие темы писать статьи. По своему опыту знаю, как трудно написать статью начинающему блогеру. Но написание статей это о...