【问题标题】:SQL JOIN, all from t1 and all from t2 except what's common to t1SQL JOIN,所有来自 t1 和所有来自 t2,除了 t1 的共同点
【发布时间】:2021-07-04 15:50:32
【问题描述】:

我需要表 A 中的所有条目以及表 B 中与表 A 不通用的所有条目。我有 6 个通用字段。我该怎么做?我尝试从表 A 左连接表 B 中选择 ...,它错过了表 A 中的一些值。还尝试了右连接、完全连接...关于如何执行此操作的任何指针?

【问题讨论】:

  • 请提供样本数据和期望的结果。
  • 有什么不常见的列吗?
  • 您如何确定 t2 和 t1 之间的公共行?单列?

标签: sql join presto


【解决方案1】:

嗯。 . .这是你想要的吗?假设ab 具有相同的列:

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 语句的结果集。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-09
    • 2018-10-25
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多