SQL:什么是“什么不存在”实际检查?

时间:2016-10-19 13:00:57

标签: sql-server not-exists

Dong a SQL INSERT INTO ... SELECT FROM ... WHERE NOT EXISTS

该条款究竟在检查什么?我希望将表中col1的结果插入到另一个表'col1'中,它不在该表中(即col1是主键)

INSERT INTO <table> (<col1>)
SELECT DISTINCT N.<col1>
FROM N
WHERE NOT EXISTS (
    SELECT 1
    FROM <table> C
    WHERE
        N.<col1> = C.<col1> 
)

在我看来,NOT EXISTS子句中的SELECT语句将返回一行(或多行),NOT EXISTS将查找0行或多于0行。

是正确的吗?

2 个答案:

答案 0 :(得分:2)

哪里不存在是非常明显的,并且只会在目标表中不存在if的位置插入行。

然而,这是一个非常令人困惑的语法,每当我需要进行任何类似的操作时,我都会尝试使用MERGE

答案 1 :(得分:1)

除此之外,Not Exist子句可用于根据您在支持查询中定义的内容将WHERE子句中的选择或更新添加到 EXCLUDE 记录。

在你的情况下,MERGE更好,但在某些情况下,如下面的例子,它也很有用:

If Not Exists ( Select 1 From dbo.Activities Where ActivityId = 107 AND Activity = 'Facility Updated' )
  Begin
    Insert Into Activities (ActivityId, Activity, CreateDt_GMT, CreatedBy, TimeZoneOffsetMins, ActionTypeId, IsTracked, IgnoreChildren, ProcessExtraInfomation, IgnoreNotChangedData, ApplicationID)
    Values(107, 'Blah', GetDate(), 'SYSTEM', -300, 3, 1, 0, 1, 1, 1 )
  End