首页 > 解决方案 > 如何在 SQL 中保留数据的同时进行重复数据删除

问题描述

我有一个数据集我正在尝试去重,而不会丢失外键。

继承人的结构:

PK1  UUID
PK2  BIGINT
FK1  BIGINT
FK2 BIGINT
DATA1 STRING
DATA2 INTEGER
...
so forth.

PK 是组合的 PK。两个 FK 来自两个单独的其他表。
此表中有重复的行。如果 PK1 和 PK2 重复,则数据字段是重复的。FK是我的问题。

数据如下所示:

PK1    PK2    FK1    FK2    Data1    Data2    Data3
1      1      1      null   a        b        c
1      1      null   2      a        b        c
1      2      5      null   d        e        f
1      2      null   7      d        e        f

我需要的是:

PK1    PK2    FK1    FK2    Data1    Data2    Data3
1      1      1      2      a        b        c
1      2      5      7      d        e        f

我怎样才能混合这些记录?

谢谢

标签: sqlgoogle-bigquery

解决方案


你似乎想要聚合:

select PK1, PK2, max(FK1) as fk1, max(FK2) as fk2,
       Data1, Data2, Data3
from t
group by PK1, PK2, Data1, Data2, Data3;

推荐阅读