2014-09-13 7 views
10

Я не могу пройти проверку равенства, используя нижеприведенный запрос на ВИЧ.Ошибка в куче запроса при соединении таблиц

У меня 3 таблицы, и я хочу присоединиться к этой таблице. Я пытаюсь, как показано ниже, но получаю ошибку:

FAILED: Ошибки при семантическом анализе: Линии 3:40 левые и правые псевдонимы встреченных в JOIN «visit_date»

select t1.*, t99.* from table1 t1 JOIN 
    (select v3.*, t3.* from table2 v3 JOIN table3 t3 ON 
    (v3.AS_upc= t3.upc_no AND v3.start_dt <= t3.visit_date AND v3.end_dt >= t3.visit_date AND v3.adv_price <= t3.comp_price)) t99 ON 
    (t1.comp_store_id = t99.cpnumber AND t1.AS_store_nbr = t99.store_no); 

Отредактированных на основе помощи от FuzzyTree:

1-й:

Мы попытались отредактировать запрос выше с использованием предложения where и where, но не получили никакого результата из запроса.

Но если мы изменили вышеуказанный запрос, удалив предложение inter с датой, я получил некоторый результат на основе «v3.adv_price < = t3.comp_price», но не использовал «фильтр даты».

select t1.*, t99.* from table1 t1 JOIN 
    (select v3.*, t3.* from table2 v3 JOIN table3 t3 on (v3.AS_upc= t3.upc_no) 
     where v3.adv_price <= t3.comp_price 
    ) t99 ON 
    (t1.comp_store_id = t99.cpnumber AND t1.AS_store_nbr = t99.store_no); 

второй:

Далее мы попытались пройти только один срок, как:

select t1.*, t99.* from table1 t1 JOIN 
     (select v3.*, t3.* from table2 v3 JOIN table3 t3 on (v3.AS_upc= t3.upc_no) 
      where v3.adv_price <= t3.comp_price and v3.start_dt <= t3.visit_date 
     ) t99 ON 
     (t1.comp_store_id = t99.cpnumber AND t1.AS_store_nbr = t99.store_no); 

Итак, теперь он показывает какой-то результат, но если мы проходим как начальную и конечную даты фильтра, его ; не показывая никакого результата.

ответ

28

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Joins

только соединяет равенство, внешние соединения, и оставил пол объединений поддерживаются в улье. Куст не поддерживает условия соединения, которые не являются равными условиями, поскольку очень сложно выразить такие условия, каккарта/уменьшить работу.

Try двигая неравенства в where п

select t1.*, t99.* from table1 t1 JOIN 
    (select v3.*, t3.* from table2 v3 JOIN table3 t3 on (v3.AS_upc= t3.upc_no) 
     where t3.visit_date between v3.start_dt and v3.end_dt 
     and v3.adv_price <= t3.comp_price 
    ) t99 ON 
    (t1.comp_store_id = t99.cpnumber AND t1.AS_store_nbr = t99.store_no); 
+1

Я редактировал запрос основан на вашу помощь, но до сих пор не удалось получить выход из запроса. Я обновил свой оригинальный пост. – Abhi

+0

Я столкнулся с той же проблемой. Предлагаемое решение является хорошим. Однако я отмечаю, что сообщение об ошибке может быть улучшено. Это вводит в заблуждение. – paolov