Выбор столбца из оператора exists

Это продолжение моего предыдущего вопроса: Оптимизация запроса оракула

Теперь я использую запрос следующим образом

select t1.column1, t2.column2 
    from table1@dev t1 
  where exists
         ( select *
              from table2@dev 
            where t2.column2 = t1.column1
              and t2.column3 > 0
                    ) 
order by column1

Но проблема в том, что я не могу получить доступ к column2 из t2, я получаю сообщение об ошибке

t2.column2 неверный идентификатор

Можно ли получить доступ к столбцу из этой таблицы при использовании EXISTS?

заранее спасибо


person Jamie Taylor    schedule 06.09.2011    source источник
comment
вы уже знаете, что столбец равен t1.column1 для выбранных строк. Так почему бы не сослаться на это? ВЫБЕРИТЕ t1.column1, t1.column1 как столбец2 ....   -  person t-clausen.dk    schedule 06.09.2011
comment
Некоторые данные из table1 отсутствуют в table2, и мне нужны только данные из table2 для этого столбца, а также все остальные столбцы, которые мне нужны из table1... надеюсь, это имеет смысл?   -  person Jamie Taylor    schedule 06.09.2011
comment
Я попытаюсь объяснить... table1 имеет 35 записей, а table2 имеет 30 записей. Я хочу выбрать записи из table2, но также выбрать некоторые другие данные из table1   -  person Jamie Taylor    schedule 06.09.2011


Ответы (1)


Exists (как следует из названия) просто проверяет, существует ли эта вещь, она не возвращает никаких данных, кроме истинного/ложного предиката существования, поэтому нет, невозможно вернуть данные из оператора exists .

Чтобы выбрать что-то из нескольких таблиц, вам нужно соединить их, например так:

select t1.column1, t2.column2      
  from table1@dev t1    
    inner join table2@dev t2 on t2.column2 = t1.column1
 where t2.column3 > 0
 order by t1.column1 
person SWeko    schedule 06.09.2011
comment
Если вы соединяете таблицу из 30 строк с таблицей из 35 строк, и это занимает много времени, проблема в другом. Если столбцы, к которым вы присоединяетесь, проиндексированы, это должно вернуться почти мгновенно, даже если количество строк исчисляется миллионами. - person SWeko; 06.09.2011
comment
Я удалил ссылку на вторую таблицу, и запрос все еще занимал целую вечность, поэтому проблема, похоже, в другом месте. Отмечу ваш пост как ответ, поскольку он помог. Спасибо. - person Jamie Taylor; 06.09.2011