2016-12-10 2 views
0

им получить столбец двусмысленно определяется им пытаются написать запрос, чтобы получить данные из трех различных таблиц мой запросCOLUMN двусмысленно DEFINED оракул

select flight_no, 
     country_code, 
     destination, 
     depatue_time, 
     arrival_time 
from flight, 
    country, 
    flight_availibility 
where country_code='MCT' 
    and destination='IND' 
order by flight_no; 

и получать ошибки им может кто-нибудь сказать мне, что это не так !!!

+3

(1) Никогда не используйте запятые в предложении 'FROM'; * always * использовать явный, правильный, современный 'JOIN' синтаксис. (2) Всегда квалифицируйте имена столбцов (желательно с псевдонимами таблиц), особенно если вы изучаете SQL. (3) Ошибка довольно очевидна; столбец, о котором вы говорили, находится в нескольких таблицах. –

+0

Вы присоединяетесь к 3 столам без условий соединения. Это правильно? – Aleksej

+0

Пожалуйста, отредактируйте свой вопрос, нажав кнопку «edit» непосредственно под тегами и включив определения каждой из соответствующих таблиц. Благодарю. –

ответ

0

Ошибка указывает на то, что вы запрашиваете столбец, который имеет имя из более чем одной из этих таблиц. Вы хотите «flight_no» - но может быть столбец с именем «flight_no» как на рейсах, так и на страновых таблицах.

Чтобы избежать этого, используйте псевдонимы в предложении FROM.

Пример

select a.col1, b.col1 
from table1 a, table2 b 
where a.id = b.id; 

Это не является неоднозначным, потому что вы явно говорить Oracle, какие столбцы с именем «col1» вы хотите - вы не делаете его угадать.

Это не часть вашего вопроса, но ваш запрос, когда вы его пишете, приведет к объединению каждой записи каждой таблицы в каждой таблице в каждой другой записи в двух других таблицах. Это называется Cartesian Join или Product.

Обязательно ли это неправильно? Возможно, нет. Но 99% времени, это не то, что вы хотите. Вы хотите, чтобы строки соответствовали друг другу, поэтому используйте предложение WHERE и отфильтровывайте строки.

Или пройдите путь ANSI JOIN и сделайте это в предложении FROM. произошла

0

ошибки, так как же имя столбца, имеющая в 2-х таблиц, поэтому, когда мы запускаем запрос, используя только имя столбца, эта ошибка происходит

Попробуй ниже, чтобы избежать этого вопроса:

select a.flight_no,b.country_code,a.destination,c.depature_time,c.arrival_time 

от полет a, страна b

Смежные вопросы