首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQL:如何正确检查记录是否存在

SQL:如何正确检查记录是否存在
EN

Stack Overflow用户
提问于 2010-11-23 16:15:26
回答 9查看 505K关注 0票数 262

在阅读一些与SQL调优相关的文档时,我发现了以下内容:

SELECT COUNT(*)

  • 计算行数。
  • 经常被错误地用于验证记录的存在。

SELECT COUNT(*)真的那么糟糕吗?

验证记录存在的正确方法是什么?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2010-11-23 16:23:56

最好使用以下两种方法之一:

代码语言:javascript
复制
-- Method 1.
SELECT 1
FROM table_name
WHERE unique_key = value;

-- Method 2.
SELECT COUNT(1)
FROM table_name
WHERE unique_key = value;

第一个选择应该是没有结果或一个结果,第二个计数应该是0或1。

您使用的文档有多老?尽管您已经阅读了很好的建议,但最新的关系型数据库中的大多数查询优化器都会优化SELECT COUNT(*),所以尽管在理论上(和较旧的数据库)存在差异,但在实践中您应该不会注意到任何差异。

票数 312
EN

Stack Overflow用户

发布于 2010-11-23 16:20:51

我希望根本不使用Count函数:

代码语言:javascript
复制
IF [NOT] EXISTS ( SELECT 1 FROM MyTable WHERE ... )
     <do smth>

例如,如果您想在将用户插入数据库之前检查用户是否存在,则查询可能如下所示:

代码语言:javascript
复制
IF NOT EXISTS ( SELECT 1 FROM Users WHERE FirstName = 'John' AND LastName = 'Smith' )
BEGIN
    INSERT INTO Users (FirstName, LastName) VALUES ('John', 'Smith')
END
票数 217
EN

Stack Overflow用户

发布于 2010-11-23 16:20:19

您可以使用:

代码语言:javascript
复制
SELECT 1 FROM MyTable WHERE <MyCondition>

如果没有符合条件的记录,则结果记录集为空。

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

https://stackoverflow.com/questions/4253960

复制
相关文章

相似问题

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