2014-09-02 2 views
0

как разговаривать следующий код, чтобы получить те же результаты, используя присоединиться (без использования подзапроса)Исключите использованием соединений без подзапроса

select a_key from table_a a 
inner join table_b b --in my code I've 5 joins like that 
    on a.a_key=b.a_key 
where a_key not in 
    (select a_key from table_c  --and conditions within this brackets also 
     where var_a beteween table_c.col1 and table_c.col2 
     or var_b beteween table_c.col1 and table_c.col2 
    ) 
+0

Вы всегда можете сохранить результаты подзапроса сначала во временную таблицу, а затем присоединиться к этой таблице во втором запросе. – ItalianStallion

+0

Почему вы хотите переписать запрос? Perfomance? Думаю, вы должны добавить мотивацию. – user2672165

+0

Да, производительность, оптимизация, объединение быстрее, чем подзапросы – user3376246

ответ

0

Следующая по существу та же логика:

select a_key 
from table_a a inner join 
    table_b b 
    on a.a_key = b.a_key left join 
    table_c c 
    on (var_a between table_c.col1 and table_c.col2 or 
     var_b between table_c.col1 and table_c.col2 
     ) and 
     a.a_key = c.a_key 
where c.a_key is null; 

Вы должны префикс ваши столбцы с псевдонимами в таблице. Колонка a_key неоднозначна в вашем оригинале, как и столбец var_a и var_b.

Это немного отличается, если любые соответствующие значения table_c.a_key равны NULL. В этом случае версия join, вероятно, ведет себя так же, как и следовало ожидать.

+0

че ck вне мои правки я забыл написать что-то – user3376246

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