SQL Join ::在联接条件之外获取记录

时间:2019-01-15 16:19:45

标签: join hive hiveql

我有2个表A和B
A
T-Regx

B
enter image description here

要求是使用id列连接两个表,并且,如果获取的名称值包含另一个具有不同id的记录,则还应将其连接。就像下面的截图一样。
输出:
enter image description here

要求

  • 表B的大小为TB。两个表的单联接将是 最好
  • 查询需要在配置单元上执行

2 个答案:

答案 0 :(得分:0)

我不熟悉HiveQL,但是对于常规SQL,您需要在查询中第二次将表B自身连接起来。

select
    b_name.id, b_name.name
from
    #table_A a                  
    join #table_B b             -- This table gets the "name" value for lookup
        on (a.id=b.id)
    join #table_B b_name        -- This is the table you want to pull your "output" from
        on (b.name=b_name.name)

此查询从本质上说,您需要在表B中找到表B中“匹配” ID的值,然后在表B中查找具有该名称值的所有行。

答案 1 :(得分:0)

您可以多次连接同一张表。因此,在下面的查询中,b1将为您提供A中所有ID的名称,b2通过名称连接在一起,以获取您不在A中的所有其他ID。

select
  b2.*
from
  A 
  inner join B b1 on b1.id = A.id
  inner join B b2 on b2.name = b1.name