如何在hive中执行左外连接而不重复检查右表中的一个值?

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

我有两个数据集:1)

Table A 
id  name
1   raju
2   ramu
2   ramu
3   rakesh

表a
2)

Table B 
id  Status
1   Y
1   Y
2   N
2   N
2   Y
3   N

表b
我想在配置单元中执行左外部联接(表a左外部联接表b),以便在联接列“id”上的两个数据集时,如果表b中的状态列至少有一次具有“y”,则结果数据集的状态将为“yes”,如下所示:

Final Result:       
id  name    Status
1   raju    Yes
2   ramu    Yes
2   ramu    Yes
3   rakesh  No

我不想在执行联接时增加结果中的记录数。结果表应该只有4条记录,而不是5条(根据匹配的联接条件增加记录)。
我如何做到这一点?

roejwanj

roejwanj1#

为了满足这个要求,需要将表b的行数减少到表a的每行一行或零行。
像这样做,每一次都有一排 id 状态为的值 Y .

SELECT DISTINCT id, Status
           FROM B
          WHERE Status = 'Y'

那你可以用旧的 LEFT JOIN ... IS NOT NULL 计算a的哪些行与b的哪些行匹配的技巧。
就这样(http://sqlfiddle.com/#!9/71d84b/1/0)

SELECT A.id, A.name, 
       CASE WHEN B.Status IS NOT NULL THEN 'Yes' ELSE 'No' END Status
  FROM A
  LEFT JOIN (
         SELECT DISTINCT id, Status
           FROM B
          WHERE Status = 'Y'
       ) B ON A.id = B.id

相关问题