【问题标题】:SQL: How to find if there is at least one record matching a conditionSQL:如何查找是否至少有一条记录与条件匹配
【发布时间】:2013-09-27 08:47:17
【问题描述】:

在我的一个数据库表中,我想知道是否有至少一条记录对应于一个条件。

我写的查询是 Count(*) from table where (condition) 在我的程序中,我可以检查结果是否为非零值。 它工作正常。

我们如何优化它?我不想等到它找到符合条件的记录总数。

【问题讨论】:

    标签: sql optimization count


    【解决方案1】:

    SQL 有exists 可用于此目的。如果查询返回结果,则返回 1,否则返回 0。

    Select Case When Exists (<query>) Then 1 Else 0 End as X
    

    【讨论】:

      【解决方案2】:
      SELECT TOP 1 1 AS found
      FROM tablename
      WHERE ...
      

      然后检查查询是否返回单行。

      在这种情况下,引擎会在找到第一行后立即返回结果(假设您没有添加ORDER BY

      【讨论】:

      • 这个解决方案确实很有用.. 还有另一个 qn.. 从条件 LIMIT 1 是我成功尝试的另一种方法的表中选择列。你能评论哪一个是最佳的吗?
      • @Dhanesh:我现在很困惑你在说什么 DBMS。是sql server吗? mysql?
      • @Dhanesh:那么答案 - 没有区别。如果 sqlite 对其进行了优化(我不知道它的优化器实际上是如何工作的) - 然后使用你更喜欢的任何东西。
      • TOP 和 LIMIT 特定于 DBMS:stackoverflow.com/q/5668540/6068036
      【解决方案3】:

      SqlCommand command = new SqlCommand("SELECT * FROM InsertProductTb", con);

              SqlDataAdapter da = new SqlDataAdapter(command);
              DataTable dt = new DataTable();
              da.Fill(dt);
      
              if (dt.Rows.Count > 0)
              {
      
               }
      

      【讨论】:

      • 如果匹配一百万行会发生什么?
      • 你必须确定一个特定的条件
      • 那么您的回答与问题中 OP 的想法有何不同?
      • 对不起,虽然他知道他的条件,但他不知道如何检查数据库中是否有记录
      • 你真的完整地阅读了这个问题吗?唯一以问号结尾的短语是“我们如何优化这个?”。你怎么看,是不是看起来像“他不知道怎么查有没有记录”?
      猜你喜欢
      • 1970-01-01
      • 2021-08-28
      • 2014-02-02
      • 1970-01-01
      • 1970-01-01
      • 2016-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多