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

How to union a data set with a specific rule

我有两个几乎相同的数据集,我正试图合并它们,但我只想合并它们,如果文件 1 中还没有日期的话。

数据集 1

File Date Type
1 1/1/2020 a
1 1/2/2020 b
1 1/3/2020 c

数据集 2

File Date Type
2 1/1/2020 a
2 1/2/2020 b
2 1/3/2020 c
2 1/4/2020 d

理想输出

File Date Type
1 1/1/2020 a
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

您可以将 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

您描述的是 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)