问题描述
有 3 个源表,可以在其中添加新用户或更新现有用户配置文件。还有一个包含所有用户的主表,由单独的进程更新。
我需要通过将源表与主表进行比较来创建一个每天刷新并包含新/更新用户的新表。三个源表有一些共同的字段,但有些是特定于表的。
我尝试使用空检查进行完全连接以获取新用户并比较字段以检测更改,但性能确实很慢。 有没有更好的方法来做到这一点?
EG。主表
电子邮件 | col1 | col2 | col3 |
---|---|---|---|
test@gmail.com | va1 | 1 | 3 |
test1@gmail.com | val2 | 1 | 4 |
表 1
电子邮件 | col1 | col2 | col4 |
---|---|---|---|
test1@gmail.com | val3 | 1 | 4 |
test2@gmail.com | val2 | 1 | 4 |
表 2
电子邮件 | col1 | col2 | col5 |
---|---|---|---|
test@gmail.com | va7 | 1 | 10 |
test3@gmail.com | val4 | 4 | 4 |
表 3
电子邮件 | col1 | col2 | col6 |
---|---|---|---|
test4@gmail.com | val5 | 2 | 2 |
预期结果
| email | col1 | col2 | col3 | col4 | col5 | col6|
| --------------- |----- |------|------|------|----- |-----|
| test@gmail.com | va7 | 1 | 3 | null | 10 | null|
| test1@gmail.com | va3 | 1 | 4 | 4 | null | null|
| test2@gmail.com | va2 | 1 | null| 4 | null | null|
| test3@gmail.com | va4 | 4 | null| null | 4 | null|
| test4@gmail.com | va5 | 2 | null| null | null | 2 |
解决方法
看看使用集合论 - 它在 SELECT
语句中实现为 UNION
、EXCEPT
和 INTERSECT
。