合并两个表、删除重复项但将所有其他非重复值保留在 SQL 中的最佳方法

Best way to combine two tables, remove duplicates, but keep all other non-duplicate values in SQL

我正在寻找结合两个 table 的最佳方法,该方法将基于电子邮件删除重复记录,并优先使用“Table 2 中的值替换任何重复项",我考虑过完整的外部联接和 UNION ALL,但是 Union all 会太大,因为每个 table 都有几列 1000。我想创建这个组合 table 作为我的完整参考 table 并另存为视图,这样我就可以引用它而不必总是在我已经很复杂的语句中添加联合或类似的东西。据我了解,完整的外部联接不一定会删除重复项。我想:

一个。使用来自两个 table 的所有列创建 table(不适用于一个 table 中的记录的字段将只有空值)

b。根据电子邮件字段从此主 table 中删除重复记录,但仅删除 table 1 条记录并保留 table 2 条重复记录,因为它们具有我想要的信息

c。左连接不起作用,因为两个 table 都有我想保留的唯一记录,我希望每个 table

保留所有 1000 多列

我不知道这是否可行,但非常感谢您的回答!

尝试在两个表之间使用 FULL OUTER JOIN,然后在每个结果集列上使用 COALESCE 函数来确定从哪个 table/column 填充结果集列

如果我对你的问题的理解正确,你想连接两个有数千列的大表,这些列(希望)在两个表之间是相同的,使用电子邮件列作为连接条件,并将两个表之间的重复记录替换为来自 Table 2.
的记录 几天前我不得不做类似的事情,所以也许你可以根据你的目的修改我的查询:

WITH only_in_table_1 AS(
SELECT *
FROM table_1 A
WHERE NOT EXISTS
(SELECT * FROM table_2 B WHERE B.email_field = A.email_field))
SELECT * FROM table_2
UNION ALL
SELECT * FROM only_in_table_1

如果表之间的 columns/fields 不同,您可以在 only_in_table_1table_2

上使用完全外部联接