【问题标题】:(SQL) Replaced NOT IN with NOT EXISTS and results differ(SQL) 将 NOT IN 替换为 NOT EXISTS,结果不同
【发布时间】:2013-11-18 09:47:17
【问题描述】:

试图修复别人的代码。 NOT IN 会破坏性能。 我把它拿出来替换为不存在,我得到了不同的结果。 注释掉的 not in 就在我的不存在之上。 有人看到我在这里做什么愚蠢的事情吗?

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)

【问题讨论】:

  • 它们做两件不同的事情。特别是,您的 NOT EXISTS() 不涉及 SELECTed 的行。
  • 你真的应该用能反映你试图寻求帮助的问题的标题提出问题。 “我在做一些愚蠢的事情”不是你想问的问题。
  • 在这种特殊情况下,您甚至可以使用 except:select ProcessID from ... except select ProcessID from @ProcessIDTable

标签: sql not-exists notin


【解决方案1】:

你可以试试:

And not exists (
  SELECT ProcessID
  FROM @ProcessIDTable
  WHERE ProcessID = vPortalInbox.ProcessID)

...或者甚至更好:您可以尝试在ProcessID 上对vPortalInbox 进行(左或右)外部连接,并在WHERE 子句中指定@ProcessIDTable.ProcessID IS NULL

...
SELECT DISTINCT(ProcessID)
FROM vPortalInbox LEFT OUTER JOIN @ProcessIDTable 
     ON vPortalInbox.ProcessID = @ProcessIDTable.ProcessID 
WHERE  GroupUserIDs LIKE '%,' + CAST(@UserID AS VARCHAR(MAX)) + ',%' 
AND StepOwnerID IS NULL AND @ProcessIDTable.ProcessID IS NULL

【讨论】:

  • 是的,我是个白痴。完全忘记添加 where 子句。非常感谢。我想我看了三十分钟。
【解决方案2】:

1 --AND ProcessID NOT IN (SELECT ProcessID FROM @ProcessIDTable)

2 And  not exists (SELECT ProcessID FROM @ProcessIDTable)

以上两种说法不一样。仅当您从不存在子句后面的括号内的子查询中没有任何行时,不存在才会评估为真。 由于 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  )

【讨论】:

    猜你喜欢
    • 2014-12-29
    • 2015-02-20
    • 2018-11-15
    • 2018-01-13
    • 2015-10-13
    • 2018-01-08
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多