当前位置: 首页 > 知识库问答 >
问题:

Sparksql针对3个表选择某些记录

经昱
2023-03-14

我有3个表,需要按以下方式提取记录

Table_A,
Table_B,
Table_C

只选择Table_A中常见的记录,忽略Table_B和Table_C中不常见的记录,最终结果将不会重复。

尝试了方法1:将Table_A与Table_B内部连接,然后将Table_A与Table_C分离,最后进行了联合。

Ab = Table_A.join(Table_B,Table_A["id"] == Table_B["id"], "inner").select(common columns)

Ac = Table_A.join(Table_C,Table_A["id"] == Table_C["id"], "inner").select(common columns)

result = Ab.union(Ac) <<Got more duplicates>>
result = result,dropDuplicates(["id"]) 

但我还是拿到了复制品。

Table_A 
left outer 
Table_B
on A.id = B.id 
left outer Table_C 
on A.id = c.id

共有1个答案

孔志强
2023-03-14

在Spark SQL中,我建议使用exists:

select a.*
from table_a a
where exists (select 1 from table_b b on b.id = a.id)
  and exists (select 1 from table_c c on c.id = a.id)

这将完成所需的筛选,并且不会重复resuletset中table_a的记录,即使table_btable_c中有多个匹配项。

 类似资料:
  • 这是我的密码: 它返回表中所有列的数组。但我不需要把所有的专栏都写下来。我只需要返回以下列:。我对此进行了搜索并找到了答案:(使用函数) 但它并没有返回预期的结果。它返回以下内容: 如您所见,没有和列。我怎样才能修好它?

  • 问题内容: 嗨,我是Spark SQL的新手。我有一个这样的数据框。 我想为每个列表器在Spark sql中选择前10个时间戳值。 我尝试了以下查询。它引发错误。 我想为每个列表器选择我需要采用的前10个时间戳值。任何帮助将不胜感激。 问题答案: 这不行吗? 编辑: 哦,我明白了。您要:

  • 我已经为我的应用程序实现了shedlock,对于我们拥有的两台服务器来说,它运行良好,没有任何问题。 我们现在在另一个域上添加了两个新服务器,shedlock也会选择它们。(好吧,这就是它的本意) 我有一份工作,创建pdf文件并将其放在文件夹中。添加的新服务器无权访问这些文件夹。因此,当这两个新服务器选择作业时,我的作业将失败。 有没有可能告诉夏洛克从我的两台服务器中选择任何一台,或者不选择另外两

  • 我创建了一个Treeview(javafx),它看起来像: 我现在想要的是,只有“tour”-树项是可选择的。但我不知道怎么做。 我已经用ChangeListener尝试过了,但我只能用它刷新选项卡(TabPane)的内容...刷新很好...但是可以选择“delivery”-TreeItems:(

  • 问题内容: 如何编写仅在联接表中的所有关联记录都满足某些条件的情况下才返回记录的SQL查询。 例如,如果A有很多B,我想从A SELECT * WHERE到给定A的所有相关B都具有B.some_val> value 我知道这可能是一个非常基本的问题,因此感谢您的帮助。另外,如果有所作为,我正在使用postgres。 山姆 问题答案: 假设不需要关联,请使用: 如果您确实需要相关性: 解释 在这使得

  • 本文向大家介绍如何在MySQL中选择以某些数字开头的记录?,包括了如何在MySQL中选择以某些数字开头的记录?的使用技巧和注意事项,需要的朋友参考一下 选择以某些数字开头的记录的最佳解决方案是使用MySQL LIKE运算符。让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 以下是查询以选择在MySQL中以某些数字开头的记录的查询