SQL JOIN,所有来自 t1 和所有来自 t2,除了 t1 的共同点
Posted
技术标签:
【中文标题】SQL JOIN,所有来自 t1 和所有来自 t2,除了 t1 的共同点【英文标题】:SQL JOIN, all from t1 and all from t2 except what's common to t1 【发布时间】:2021-07-04 15:50:32 【问题描述】:我需要表 A 中的所有条目以及表 B 中与表 A 不通用的所有条目。我有 6 个通用字段。我该怎么做?我尝试从表 A 左连接表 B 中选择 ...,它错过了表 A 中的一些值。还尝试了右连接、完全连接...关于如何执行此操作的任何指针?
【问题讨论】:
请提供样本数据和期望的结果。 有什么不常见的列吗? 您如何确定 t2 和 t1 之间的公共行?单列? 【参考方案1】:嗯。 . .这是你想要的吗?假设a
和b
具有相同的列:
select a.*
from a
union all
select b.*
from b
where not exists (select 1
from a
where a.col1 = b.col1 and a.col2 = b.col2 and . . .
);
编辑:
SparkSQL 应该支持not exists
,但您可以改用left join
编写它:
select a.*
from a
union all
select b.*
from b left join
a
on a.col1 = b.col1 and a.col2 = b.col2 and . . .
where a.col1 is null;
【讨论】:
我正在使用 sparksql,是否存在不存在的等价物? select 1 有什么作用?【参考方案2】:我认为最简单的方法是使用这样的UNION
运算符:
(SELECT * FROM TableA)
UNION
(SELECT * FROM TableB);
联合运算符用于组合两个或多个SELECT
语句的结果集。
【讨论】:
以上是关于SQL JOIN,所有来自 t1 和所有来自 t2,除了 t1 的共同点的主要内容,如果未能解决你的问题,请参考以下文章