尝试修复其他人的代码。 NOT IN杀死了性能。 我把它取出并替换为Not Exists,我得到了不同的结果。 注释掉的不是我的不存在。 有人看到我在这里做的任何蠢事吗?
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)
答案 0 :(得分:2)
你可以尝试:
And not exists (
SELECT ProcessID
FROM @ProcessIDTable
WHERE ProcessID = vPortalInbox.ProcessID)
......或者甚至可能更好:您可以在vPortalInbox
上尝试(左或右)外部联接到ProcessID
,并在WHERE
子句中指定{{1} }}:
@ProcessIDTable.ProcessID IS NULL
答案 1 :(得分:0)
1 --AND ProcessID NOT IN (SELECT ProcessID FROM @ProcessIDTable)
2 And not exists (SELECT ProcessID FROM @ProcessIDTable)
以上两种说法不一样。仅当从not exists子句后的括号内的子查询中没有得到任何行时,not exists才会计算为true。 由于您不具有子查询的条件,因此不存在子句,除非该表为空,否则它将永远不会返回0行。
尝试使用where 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 )