SQL:'WHERE NOT EXISTS' 实际检查的是什么?

SQL: What is 'WHERE NOT EXISTS' actually checking?

董阿SQLINSERT INTO ... SELECT FROM ... WHERE NOT EXISTS

该子句实际检查的是什么?我希望将来自 table 的 col1 的结果插入到另一个 table 的 'col1' 中,而 table 中还没有(即 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 语句将 return 一行(或多行),而 NOT EXISTS 将查找 0 行或多于零行。

对吗?

Where not exists 是不言自明的,并且只会在目标 table.

中不存在值的情况下插入行

然而,这是一个非常混乱的语法,每当我需要做任何类似的操作时,我都会尝试使用 MERGE

除此之外,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