如何从多个源表中检测新/更改

问题描述

有 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 语句中实现为 UNIONEXCEPTINTERSECT