SQL 填充常量以防万一连接两个表时不匹配
Posted
技术标签:
【中文标题】SQL 填充常量以防万一连接两个表时不匹配【英文标题】:SQL Fill Constants Incase there is no match in joining two tables 【发布时间】:2018-10-11 01:12:43 【问题描述】:假设我有一张桌子:
+--------+-----------+----------+
|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 问题。
【问题讨论】:
【参考方案1】:使用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;
【讨论】:
谢谢...正是我想要的:)以上是关于SQL 填充常量以防万一连接两个表时不匹配的主要内容,如果未能解决你的问题,请参考以下文章