(SQL)将不在替换为不存在,结果不同
试图修复其他人的代码。这不符合性能。 我把它拿出来,换成了不存在,我得到了不同的结果。 注释掉的not in就在我的not exists上方。 有人看到我在这里干什么蠢事吗(SQL)将不在替换为不存在,结果不同,sql,not-exists,notin,Sql,Not Exists,Notin,试图修复其他人的代码。这不符合性能。 我把它拿出来,换成了不存在,我得到了不同的结果。 注释掉的not in就在我的not exists上方。 有人看到我在这里干什么蠢事吗 IF @ProcessComplete = 1 BEGIN -- PRINT 'Group-Complete' INSERT INTO @ProcessIDTable SELECT DISTINCT(ProcessID) FROM vPortalInbox WHERE G
IF @ProcessComplete = 1
BEGIN
-- PRINT 'Group-Complete'
INSERT INTO @ProcessIDTable
SELECT DISTINCT(ProcessID)
FROM vPortalInbox
WHERE GroupUserIDs LIKE '%,' + CAST(@UserID AS VARCHAR(MAX)) + ',%'
AND StepOwnerID IS NULL
--AND ProcessID NOT IN (SELECT ProcessID FROM @ProcessIDTable)
And not exists (SELECT ProcessID FROM @ProcessIDTable)
你可以试试:
And not exists (
SELECT ProcessID
FROM @ProcessIDTable
WHERE ProcessID = vPortalInbox.ProcessID)
…或者可能更好:您可以尝试在ProcessID上左或右外部连接到vPortalInbox,并在WHERE子句中指定@ProcessIDTable.ProcessID为NULL:
1-和ProcessID不在从@ProcessIDTable中选择ProcessID中
上述两种说法不尽相同。not exist只有在not exists子句后面括号内的子查询中没有行时才会计算为true。
由于您没有以下not exists子句的子查询条件,因此除非表为空,否则它将永远不会返回0行
尝试使用以下where子句:
FROM vPortalInbox P1
WHERE GroupUserIDs LIKE '%,' + CAST(@UserID AS VARCHAR(MAX)) + ',%'
AND StepOwnerID IS NULL
And not exists (SELECT 1 FROM @ProcessIDTable P2
where P1.ProcessID = P2.ProcessID )
它们做两件不同的事情。特别是,您的“不存在”不涉及所选的行。您应该真正提出标题反映您试图寻求帮助的问题。我在做一些愚蠢的事情并不是你想问的问题。在这种特殊情况下,你甚至可以使用除了:select ProcessID from。。。除了从@ProcessIDTable.Yep中选择ProcessID之外,我是个白痴。完全忘记添加where子句。非常感谢。我想我已经看了三十分钟了。
2 And not exists (SELECT ProcessID FROM @ProcessIDTable)
FROM vPortalInbox P1
WHERE GroupUserIDs LIKE '%,' + CAST(@UserID AS VARCHAR(MAX)) + ',%'
AND StepOwnerID IS NULL
And not exists (SELECT 1 FROM @ProcessIDTable P2
where P1.ProcessID = P2.ProcessID )