引用两个表中的列别名

时间:2016-12-21 06:50:07

标签: sql apache-spark hiveql wso2-das

我有两个hive SQL表,其中包含以下列。

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

对我在查询中遗漏的内容有任何疑问?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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);