如何将数据集与特定规则联合

时间:2020-12-21 23:43:46

标签: sql datetime union snowflake-cloud-data-platform full-outer-join

我有两个几乎相同的数据集,我正在尝试合并它们,但我只想在文件 1 中没有日期的情况下合并它们。

数据集 1

<头>
文件 日期 类型
1 1/1/2020
1 1/2/2020 b
1 1/3/2020 c

数据集 2

<头>
文件 日期 类型
2 1/1/2020
2 1/2/2020 b
2 1/3/2020 c
2 1/4/2020 d

理想输出

<头>
文件 日期 类型
1 1/1/2020
1 1/2/2020 b
1 1/3/2020 c
2 1/4/2020 d

如果两个数据集具有相同的日期,那么我只想使用文件 #1 中的数据

SELECT FILE, DATE, TYPE FROM TABLE A
UNION
SELECT FILE, DATE, TYPE FROM TABLE B

[设置] https://www.db-fiddle.com/f/whfZGwnAJcAYaQii6avF6k/1

2 个答案:

答案 0 :(得分:1)

您正在描述一个 full join。 Popeye 的答案有效并且是不支持语法的数据库中的典型方法。但是 Snowflake does,因此查询更简单,更有效地表述为:

select coalesce(t1.file, t2.file) as file, date, coalesce(t1.type, t2.type) as type
from t1
full outer join t2 using (date)

答案 1 :(得分:0)

您可以将 union allnot exists 一起使用,如下所示:

SELECT DISTINCT FILE, DATE, TYPE FROM TABLEA
UNION
SELECT DISTINCT FILE, DATE, TYPE FROM TABLEB B
WHERE NOT EXISTS 
(SELECT 1 FROM TABLEA A
  WHERE A.DATE = B.DATE
    AND A.TYPE = B.TYPE) 

注意:我使用 distinct 使逻辑类似于 union 删除重复项。如果您的各个表中没有重复项,您可以从查询中删除 distinct