【问题标题】:How to exclude rows in sql server insert statement?如何排除sql server insert语句中的行?
【发布时间】:2017-08-24 17:15:21
【问题描述】:

我有这样的声明

insert into A (id, nid)
(
    select id, 100 as nid
    from B
    group by id
)

这可行,但问题是表 A,在 (id, nid) 上有一个主键约束,并且计算的嵌套查询中的某些行已经存在于表 A 中。如何将它们排除在包含范围之外在嵌套查询中?

谢谢

【问题讨论】:

  • 使用合并语句并忽略匹配项

标签: sql sql-server tsql insert


【解决方案1】:

你可以使用EXCEPT:

insert into A (id, nid)
select id, 100 as nid
from B
group by id
EXCEPT
SELECT id, nid
FROM A;

【讨论】:

    【解决方案2】:

    只需检查行是否存在...

    insert into A (id, nid)
    select id, 100 as nid
    from B
    WHERE NOT EXISTS (SELECT * FROM A WHERE A.id = B.id AND A.nid = 100)
    group by id
    

    PS:您的选择周围的括号是不必要的

    【讨论】:

      【解决方案3】:

      添加 Where 子句:

      insert A (id, nid)
      select id, 100 as nid
      from B
      Where Not exists (Select * from A 
                        Where id = B.Id
                          and nid = 100)
      group by id
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-12
        • 2015-11-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多