【问题标题】:SQL - Union two tables and insert into third one if not existsSQL - 联合两个表,如果不存在则插入第三个表
【发布时间】:2017-03-28 20:02:57
【问题描述】:

我有三个具有相同列数的表。

第一个表卸载
第二个表 Offload_Temp
决赛桌Merge_Test

数据会定期插入到Offload_Temp中(插入新数据前所有行都被删除)

delete from Offload_Temp

我想要实现的是...合并/合并 Offload 和 Offload_Temp 并插入到 Merge_Test

Merge_Test 已经包含一些数据。我想避免重复。

以下是我的查询:

INSERT INTO Merge_Test SELECT * FROM Offload UNION SELECT * FROM Offload_Temp EXCEPT (SELECT * FROM Merge_Test)  

每次 Offload_Temp 插入新数据(它可能包含相同的数据)并且上述查询在 Merge_Test

中创建重复项

此过程会定期重复。

如何避免Merge_Test中的重复?

【问题讨论】:

  • 只是为了澄清第二次查询。我没有找到任何重复项。我错过了什么吗?
  • 是的,虚拟数据没有重复项。也许我需要再倾倒一些并尝试。我想要实现的是......我有一个主表 Offload 和辅助表 Offload_Temp 辅助表上的数据将被删除,并且将提供新数据,其中可能包含与我要合并的 Offload 相同的行并将非重复值从 Offload_Temp 插入到 Offload 中。请指教。
  • 你是说我的回答没有用吗?
  • @maSTARrHiAn 它有效。非常感谢!

标签: sql sql-server sql-server-2012


【解决方案1】:

你可以试试这个。

INSERT INTO Merge_Test
 select * from (
  SELECT
    *
  FROM Offload
  UNION
  SELECT
    *
  FROM Offload_Temp

  ) x
  except
  SELECT
    *
  FROM Merge_Test

如果 offload 和 offload_temp 可以具有相同的数据,请尝试以下查询。话虽如此,UNION 应该给你不同的结果。显示所有表格的数据可能会更好。

INSERT INTO Merge_Test
     select * from (
      SELECT
        *
      FROM Offload
      except
      SELECT
        *
      FROM Offload_Temp

      ) x
      except
      SELECT
        *
      FROM Merge_Test

【讨论】:

  • 它在 Merge_Test 表中创建重复项 Offload_Temp 可能包含 Merge_Test 中已经存在的数据并且在运行时它正在创建重复的查询。
  • 你是说offload和offload_temp可以有相同的数据?
  • 是的,它们可能包含相同的数据。我想避免重复。 .
  • 但是 UNION 应该给你不同的行......我想知道你的内容是什么样的
  • 如果有一列将包含具有相似其他字段值的不同值,那么除了将不起作用...因此您必须使用不存在
猜你喜欢
  • 2018-03-23
  • 1970-01-01
  • 1970-01-01
  • 2011-08-27
  • 2014-02-14
  • 2015-06-09
  • 1970-01-01
  • 2021-09-22
  • 2021-09-21
相关资源
最近更新 更多