说我有一张桌子:
+--------+-----------+----------+
|style_id|SegmentName|StyleViews|
+--------+-----------+----------+
|1 |Z |1 |
|1 |X |2 |
|2 |Z |1 |
|1 |Y |2 |
|3 |Y |1 |
|3 |X |1 |
+--------+-----------+----------+
我们称它为table1
和另一个表格:
+-----------+
|allsegments|
+-----------+
|X |
|Y |
|Z |
+-----------+
我们称它为table2
我如何达到这样的输出结果:
+--------+-----------+----------+
|style_id|SegmentName|StyleViews|
+--------+-----------+----------+
|1 |X |2 |
|1 |Y |2 |
|1 |Z |1 |
|2 |X |0 |
|2 |Y |0 |
|2 |Z |1 |
|3 |X |1 |
|3 |Y |1 |
|3 |Z |0 |
+--------+-----------+----------+
本质上,如果将table1与table2连接时没有匹配项,则必须在位置加上0。
似乎是一个非常简单的问题,但是我尝试了各种连接,例如full_outer,left_outer,right_outer,但是,我无法完成我想要的工作。在这方面的任何帮助将不胜感激。
我正在尝试在Spark sql中执行此操作,但是我认为此问题是一般的sql问题。
答案 0 :(得分:0)
使用cross join
生成行,使用left join
引入值:
select s.style_id, se.segmentname, coalesce(styleviews, 0) as styleviews
from (select distinct style_id from table1) s cross join
allsegments se left join
table1 t
on t.style_id = s.style_id and
t.segmentname = se.segmentname;