如何选择正在进行全外连接的同一列?

时间:2017-02-07 06:07:35

标签: sql apache-spark-sql spark-dataframe

如果我有两张桌子

Table A
user_id type
123     tier1
124     tier2

Table B
user_id sub_type
123     sub_tier1
125     sub_tier2

我想full outer加入他们并成为

user_id type sub_type
123     tier1   sub_tier1
124     tier2   null
125     null    sub_tier2

我试过像

这样的东西
  

选择coalesce(A.user_id,B.user_id)作为user_id,type,sub_type from   A.user_id = B.user_id

上的完整外连接B.

但它不起作用,因为它只获取user_id的子集,而不是从两个表中合并user_ids

更多细节: 我实际上使用Spark SQL运行它,通过使用上面的查询,它实际上比在数据帧中做的更少结果

  

tablea.join(tableb,“user_id”,“full”)

2 个答案:

答案 0 :(得分:0)

我在这里看不到任何问题。请参阅以下代码段

WITH tablea (user_id, type) 
     AS (SELECT '123', 
                'tier1' 
         UNION 
         SELECT '124', 
                'tier2'), 
     tableb (user_id, sub_type) 
     AS (SELECT '123', 
                'sub_tier1' 
         UNION 
         SELECT '125', 
                'sub_tier2') 
SELECT COALESCE(a.user_id, b.user_id) AS user_id, 
       type, 
       sub_type 
FROM   tablea a 
       FULL OUTER JOIN tableb b 
                    ON a.user_id = b.user_id; 

USER_ID |TYPE   |SUB_TYPE 
123     |tier1  |sub_tier1
124     |tier2  |(null)   
125     |(null) |sub_tier2
(Complete, 3 rows buffered in 0:00.9) 

答案 1 :(得分:0)

正如评论中提到的,我也面临着类似的问题。我重命名加入密钥并解决了问题。尝试重命名user_id列。让我知道结果。