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), возникла проблема и с мыслями «наверное это надолго» я начал рыться в интернетах. К счастью, решен...
В этой статье я хочу рассказать, про заработок на партнерских программах через свой сайт. Я думаю эта тема сейчас более актуальна для новичков. Здравствуйте, уважаемые друзья! Для новичков. Эта статья касается больше новичков, потому что многие новички говорят...
Здравствуйте, друзья. Правильное написание статей: сегодня мы поговорим о том, какое значение имеет правильное написание статей для новичков. На какие темы писать статьи. По своему опыту знаю, как трудно написать статью начинающему блогеру. Но написание статей...