【问题标题】:union of 2 tables without duplicates没有重复的 2 个表的并集
【发布时间】:2016-05-16 15:17:11
【问题描述】:

我很难找到一个明确的答案。 我有 2 个具有完全相同列的表,比如说 t1 和 t2。 我想将 t2 中的所有行添加到 t1,但在最终 t1 中消除重复项。

我可以使用 SELECT INTO ,但这会留下我所理解的重复项。目前我在新表 t3 中使用了简单的 UNION(它消除了重复项),但这使得一切都变得有点混乱,因为我需要将所有行保留在最后 t1 中(所以我做了“DROP TABLE t1 并将 t3 重命名为t1")。但我在想,一定有更好的方法来做到这一点,也许是其中一个 JOINS?

【问题讨论】:

  • 我不需要订购
  • 但我需要将结果保存在一个表中,而不仅仅是返回联合查询的结果
  • 样本数据和期望的结果可以澄清这个问题。你说的重复是什么意思?如果没有其他信息,就会假设所有列。因此,UNION 将是正确的方法。
  • 是的,UNION 会起作用,但我如何使用 t1 和 t2 的 UNION 并将结果保存在 t1 中(而不仅仅是返回并集)?

标签: sql join union


【解决方案1】:

只需执行INSERT,其中第一个表中尚不存在值:

Insert Into T1 (Col1, Col2, ...)
Select  T2.Col1, T2.Col2, ...
From    T2  
Where Not Exists
(
    Select  *
    From    T1
    Where   (T1.Col1 = T2.Col1 Or (T1.Col1 Is Null And T2.Col1 Is Null))
    And     (T1.Col2 = T2.Col2 Or (T1.Col2 Is Null And T2.Col2 Is Null))
    And     ...
)

【讨论】:

  • @lad2025 关于NULLs 的公平点,但我对第二点不太确定。来自问题:I want to add to t1 all the rows from t2 but eliminate duplicates in the final t1. 在我看来,他想做的只是将新记录从t2 插入到t1 而不重复行。
  • 针对数据中的NULL 条件进行了更新。
【解决方案2】:
INSERT INTO T1 (column1, column2, column3,...columnN) 
(SELECT column1, column2, column3,...columnN FROM T2
EXCEPT
SELECT column1, column2, column3,...columnN FROM T1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    相关资源
    最近更新 更多