sql - 组合两个/四个表
问题描述
我正在开发一个 Spark 程序,该程序本质上是在尝试组合以下两个表:
表格1
+---+---+---+
| a | b | c |
+---+---+---+
| 1 | 2 | 6 |
| 4 | 5 | 6 |
+---+---+---+
表2:
+---------+-----+--------+
|Attribute|Value|Validity|
+---------+-----+--------+
| A | 1 | false |
| A | 4 | false |
| B | 2 | false |
| B | 5 | false |
| C | 6 | true |
+---------+-----+--------+
我想查找每个(属性,值)对是否有效。基本上,包含我需要的所有信息的结果表可能如下所示:
+-+-+-+---------+---------+---------+
|A|B|C|ValidityA|ValidityB|ValidityC|
+-+-+-+---------+---------+---------+
|1|2|6| false | false | true |
|4|5|6| false | false | true |
+-+-+-+---------+---------+---------+
例如,在对表进行一些预处理之后,可以通过三重连接来实现上表。但是三重连接对我来说似乎非常低效,因为我正在使用大数据。此外,我将不得不使用一个循环来单独执行每个连接,这也是我不想要的。
有谁知道用单个查询归档上述结果的方法(额外的预处理和对表的简单更改没问题)?
我无法让格式正常工作,对此感到抱歉。
亲切的问候
-巴里
解决方案
您可以join
为每个属性创建一次表格:
select t1.*,
a.validity as validityA,
b.validity as validityB,
c.validity as validityC
from table1 t1 left join
table2 a
on t1.a = a.value and a.attribute = 'A' left join
table2 b
on t1.b = b.value and b.attribute = 'B' left join
table2 c
on t1.b = c.value and c.attribute = 'C';
注意:NULL
当 中没有匹配项时,这将返回有效性列值table2
。
推荐阅读
- google-apps-script - 您如何仅向 Google 电子表格中的工作表所有者授予编辑权限?
- javascript - 如何让 discord bot 在 discord.js 中发送消息后产生表情符号反应?
- java - java json post请求使用HttpURLConnection和nodejs服务器
- java - jakarta.xml.bind.annotation.XmlRootElement 是否可用?
- python-3.x - 如何将十六进制字符串转换为字节
- google-apps-script - google app slides pageElements bringToFront 似乎是随机的
- excel - 根据单元格中指定的数量打印
- javascript - CSS - 整页上的 SVG [Anime JS]
- java - 如何使 JFrame 居中?
- c++ - 矩阵必须有多大才能不能使用 Eigen::SimplicialLLT 求解器?