首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NOT IN and equals与IN and not equals的区别

NOT IN and equals与IN and not equals的区别
EN

Stack Overflow用户
提问于 2013-04-18 23:52:19
回答 2查看 2.6K关注 0票数 2

我的查询需要返回流水线速率不是'No Usage‘的所有使用记录。

What's the difference between NOT EXISTS vs. NOT IN vs. LEFT JOIN WHERE IS NULL?

我已经看到了上面的问题,并决定使用IN而不是EXISTS,因为表中的值可以为空。下面哪一种更好更有效,或者有没有比下面两种更有效的方法?

代码语言:javascript
复制
SELECT *
FROM   usagerecords UR
WHERE  UR.usagerateid NOT IN (SELECT id
                              FROM   pipelinerate PR
                              WHERE  PR.name = 'No Usage')

SELECT *
FROM   usagerecords UR
WHERE  UR.usagerateid IN (SELECT id
                          FROM   pipelinerate PR
                          WHERE  PR.name <> 'No Usage') 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-18 23:55:56

如果id是可空的(我希望它不是空的,否则它的名字很糟糕),NOT IN会给你错误的结果。

既然一次又一次地证明EXISTS更高效(或者至少不会降低效率),那么为什么要选择IN而不是EXISTS呢?IN必须实现整个集合。

代码语言:javascript
复制
SELECT * -- stop doing this
  FROM dbo.usagerecords AS UR
  WHERE EXISTS
  (
    SELECT 1 FROM dbo.pipelinerate AS pr
      WHERE pr.id = ur.usagerateid
      AND pr.name <> 'No Usage'
  );

您还可以像这样表达您的其他查询:

代码语言:javascript
复制
SELECT * -- again, stop doing this
  FROM dbo.usagerecords AS UR
  WHERE NOT EXISTS 
  (
    SELECT 1 FROM dbo.pipelinerate AS pr
      WHERE pr.id = ur.usagerateid
      AND pr.name = 'No Usage'
  );

但我不知道哪一个能得到正确的结果。这就是为什么我们通常要求样本数据和期望的结果。

与使用INEXISTS相比,使用SELECT *对性能的负面影响可能更大。FWIW。

票数 4
EN

Stack Overflow用户

发布于 2013-04-19 00:04:02

“NOT EXISTS与NOT IN与LEFT JOIN WHERE IS NULL有什么区别?”

Not exists在发现一个匹配项时立即退出。

人们关心的是包含大量结果的列表中的in或Not,但Jeff Moden的一些测试表明,它们可以很好地工作到百万项范围,这通常是足够的。

Left join is null是基于设置的,所以它是“经典”的解决方案。"In“基本上变成了一个巨大的或列表。Left join where is null没有任何特别的优势当你只是在测试遗漏的东西时,我喜欢使用left self join/is null模式,当我在查找每个用户最近的事件时。

Not in非常简单,任何新手开发人员都会理解它的作用。

Not exists几乎同样清晰,但可能高于新手。

Left join/is null经常被误解,即使是中层开发人员也是如此。所以就我个人而言,我发现它不是最容易维护的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16087608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档