2016-12-21 5 views
0

У меня есть две таблицы SQL hive, которые состоят из следующих столбцов.Ссылаясь на псевдоним столбца в двух таблицах

table_1

|customer_id | ip_address| 

region_table

|country_name | region_name| 

Я попытался,

SELECT table_1.customer_id, table_1.ip_address, getCountry(ip_address) AS Country, region_table.region_name FROM table_1 JOIN region_table ON region_table.country_name = Country; 

getCountry() является UDF, которая возвращает название страны, когда IP-адресВ него передается. Я хочу использовать это название для создания другого столбца с соответствующей областью из region_table. И я хочу , чтобы получить следующую таблицу в качестве моего вывода.

customer_id | ip_address | Country | region_name 

Любые мысли о том, что я не хватает в моем запросе?

ответ

1
select  c.customer_id 
      ,c.ip_address 
      ,getCountry(c.ip_address) as Country 
      ,r.region_name 

from    table_1   c 

      join region_table r 

      on  r.country_name = 
        getCountry(c.ip_address) 
+0

Спасибо! Получил это сортировка таким образом. –

+0

Уже приняты. Спасибо :) –

1

В случае Oracle, вы можете не относится столбец псевдоним определен в SELECT заявлении в WHERE пункте того же запроса !! Поскольку механизм базы данных сначала оценивает предложение WHERE и идентифицирует подходящие строки, а затем переходит к выборке столбцов, как определено в части запроса SELECT.

В вашем случае, правый запрос должен быть

select 
    table_1.customer_id, 
    table_1.ip_address, 
    getCountry(ip_address) AS Country, 
    region_table.region_name 
FROM table_1 
JOIN region_table ON region_table.country_name = getCountry(table_1 .ip_address); 
+0

Объяснение неверно. Нет логического ограничения, предотвращающего распознавание выражений в предложении SELECT в других предложениях. Это вопрос разбора, а не исполнения, и поскольку все заявление известно заранее, это не проблема. Teradata, например, поддерживает его, и вы можете использовать псевдонимы, когда захотите, включая предложение WHERE и даже предложение SELECT. –

+0

@DuduMarkovitz В случае Oracle вы можете ссылаться на псевдоним столбца из внутреннего запроса во внешнем запросе (или 'WITH'), но не как часть предложения WHERE, когда такое же предложение WHERE используется для получения псевдонима столбца , example 'select full_name, emp_id from (выберите first_name || '' || last_name как full_name, emp_id от emp), где full_name =« John Smith »отлично. В случае Oracle sql, в хронологическом порядке, WHERE происходит до SELECT. Я не знаю о Teradata, поэтому я ограничу свои комментарии Oracle (также обновленный в моем ответе) –

+0

Это не вопрос какого-либо заказа. Вспомните псевдоним как макрос - текст, который можно искать и заменять где угодно в тексте инструкции. Если я дам вам утверждение как «выберите 1 как xxx, xxx + 1 как y из t, где xxx = 1', вы точно поймете, что я имею в виду. –

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