如何将数据集与特定规则合并
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
您可以将 union all
与 not 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)
我有两个几乎相同的数据集,我正试图合并它们,但我只想合并它们,如果文件 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
您可以将 union all
与 not 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)