【问题标题】:SQL Server insert query avoiding duplicatesSQL Server 插入查询避免重复
【发布时间】:2017-10-18 23:49:09
【问题描述】:

我需要从 TableB 插入 TableA 并避免重复,我尝试了以下它给出了错误:

违反主键约束“PK_TableA”。无法插入重复键...

 insert  into TableA (DataField, TitleId, ClassId, ValueOrder, StrValue)
    select 'Somtext',[title_id],'-1', '1', 
          [reference_text]
    from TableB
    where TableB.SomeColumn ='sometext 2014'



TableA
Title_id  reference_text
1234       ABCD   
1487       XFRE
1434       DERE

TableB
DataField  TitleId  ClassId  ValueOrder  StrValue

现在的问题是TableB 中已经存在数据。我需要避免当TableA.Tile_id = TableB.TitleId 匹配时。

【问题讨论】:

标签: sql sql-server tsql


【解决方案1】:

使用where not exists

insert  into TableA (DataField, TitleId, ClassId, ValueOrder, StrValue)
select 'Somtext',[title_id],'-1', '1', 
       [reference_text]
from TableB
where TableB.SomeColumn ='sometext 2014'
and not exists (select 1 from TableA ta where ta.TitleID = TableB.title_id)

【讨论】:

  • 最后一行显示无效的对象名称 TableA
【解决方案2】:

看看这篇文章,您可以进行合并,然后在匹配时(删除/更新/插入)。

https://www.red-gate.com/simple-talk/sql/learn-sql-server/the-merge-statement-in-sql-server-2008/

【讨论】:

    【解决方案3】:

    像这样将NOT IN 添加到WHERE 子句应该可以:

    WHERE TableB.SomeColumn ='sometext 2014'
    AND TableB.TitleId NOT IN (SELECT Tile_Id FROM TableA)
    

    【讨论】:

      猜你喜欢
      • 2021-03-06
      • 1970-01-01
      • 1970-01-01
      • 2014-08-16
      • 2020-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多