配置单元中的左外部联接导致错误

jjjwad0x  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(246)

我正在尝试对配置单元中的两个表执行左外部联接。这里的连接条件涉及 LIKE 接线员。这是我试图执行的查询:

SELECT *
FROM a 
LEFT OUTER JOIN 
    (SELECT * 
     FROM b  
     WHERE class = 'ex') ON b.mo LIKE CONCAT(a.device_name ,'%')
                         AND a.time_stamp BETWEEN to_utc_timestamp(from_unixtime(cast(b.first_time AS BIGINT) - 660), "z")
                                          AND to_utc_timestamp(from_unixtime(cast(b.first_time AS BIGINT) + 60),"z")

当我执行这个查询时,我得到一个错误
在联接“%”中同时遇到左别名和右别名
这里的目的是在给定条件下,即基于设备名和 time_stamp .
如果有人能帮我,我会非常感激的。

kg7wmglp

kg7wmglp1#

like 中不支持 join 条件。解决这个问题的一种方法是在 where 条款。

SELECT * --better specify columns needed instead of *
FROM a 
LEFT OUTER JOIN (SELECT * from b  WHERE class = 'ex') b ON 1=1
WHERE b.mo LIKE CONCAT(a.device_name ,'%')
AND a.time_stamp 
BETWEEN to_utc_timestamp(from_unixtime(cast(b.first_time AS BIGINT) - 660),"z")
AND to_utc_timestamp(from_unixtime(cast(b.first_time AS BIGINT) + 60),"z")

但这种方法的问题是 join 变成一个 inner join 因为您正在筛选正确的表(在本例中是b)。

相关问题