SQL - 联合两个表并插入第三个表(如果不存在)

时间:2017-03-28 20:02:57

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

我有三个列数相同的表。

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

数据会定期插入 Offload_Temp (在插入新数据之前删除所有行)

delete from Offload_Temp

我想要实现的目标是......联盟/合并卸载 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 中的重复?

1 个答案:

答案 0 :(得分:0)

你可以试试这个。

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