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
董阿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