2014-09-14 2 views
1

У меня есть две таблицы A и B, которые имеют следующую структуру.Как присоединиться к двум таблицам в HIVE.

// Table A 

Name Age actualdate no 

// Table B 

City sdate edate   id 

Я хочу, чтобы получить все поля из A и B, используя JOIN, где ID = нет и SDATE < = actualdate и EDATE> = actualdate.

Я попытался как показано ниже, используя предложение where, но оно не работает.

select v3.*, t3.* from A v3 
JOIN 
B t3 
where v3.id = t3.no and 
     v3.sdate <= t3.actualdate and 
     v3.edate >= t3.actualdate 
limit 1; 

Использование В статье:

select v3.*, t3.* from A v3 
    JOIN 
    B t3 
    ON (v3.id = t3.no and 
      v3.sdate <= t3.actualdate and 
      v3.edate >= t3.actualdate) 
    limit 1; 

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

+0

Какая ошибка вы получаете, когда пытаетесь сделать соединение? –

+0

Когда я использую предложение «ON», я получаю ошибку как: FAILED: Ошибка в семантическом анализе: Линия И левые, и правые псевдонимы, встречающиеся в JOIN 'actualdate'. и когда я использую предложение WHERE, это не ошибка, но я не получаю никакого результата. Но если я удалю часть «и v3.sdate <= t3.actualdate и v3.edate> = t3.actualdate» из предложения «ON», она работает нормально, но без проверки условий. – Ronak

ответ

6

Вместо использования условий < = и> = внутри предложения ON вы можете использовать WHERE для фильтрации.

select v3.*, t3.* from A t3 
JOIN 
B v3 
ON (v3.id = t3.no) 
WHERE v3.sdate <= t3.actualdate and 
     v3.edate >= t3.actualdate 
limit 1; 

Примечание: ваши псевдонимы t3 и v3 были взаимозаменяемы.